Django 温故

2018-12-24  本文已影响0人  垃圾桶边的狗

HTTP Objects

HttpRequest

Django 中间件

 
def simple_middleware(get_response):
    # do_something_for_init()
    def middleware(request):
        # do_something_before_views(request)
        response = get_response(request) # views 函数在这⾥里里执⾏行行 # do_something_after_views(response)
        return response
    return middleware
 
class MyMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        # do_something_before_views(request)
        response = self.get_response(request)
        # do_something_after_views(response)
        return response
    def process_view(self, request, view_func, view_args,view_kwargs):
        response = view_func(*view_args, **view_kwargs)
        return response
 
from django.utils.deprecation import MiddlewareMixin
class MyMiddleware(MiddlewareMixin):
    def process_request(self, request):
        pass
    def process_view(self, request, view_func, view_args,view_kwargs):
        pass
    def process_response(self, request, response):
        return response

Form 表单

 
from django.forms import Form
from django.forms import IntegerField, CharField, DateField,
ChoiceField
class TestForm(Form):
    TAGS = (
        ('py', 'python'),
        ('ln', 'linux'),
        ('dj', 'django'),
    )
    fid = IntegerField()
    name = CharField(max_length=10)
    tag = ChoiceField(choices=TAGS)
    date = DateField()
data = {'fid': 'abc123', 'name': '1234567890', 'tag': 'dj', 'date':
'2017-12-17'}
form = TestForm(data)
print(form.is_valid())
print(form.cleaned_data) # cleaned_data 属性是 is_valid 函数执⾏行行时动态添 加的
print(form.errors)
 
class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ['name', 'birth']

模板

!sdfds.png](https://img.haomeiwen.com/i12529562/a0929192276e348e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

 
<!DOCTYPE html>
<html>
    <head>
        <title>{{title}}</title>
        <link rel="stylesheet" type="text/css"
href="/static/css/style.css">
        {% block "ext_css" %}{% endblock %}
    </head>
    <body>
        <!-- {% block "navbar" %}{% endblock %} -->
        {% block "sidebar" %}{% endblock %}
        {% block "content" %}{% endblock %}
        <!-- {% block "footbar" %}{% endblock %} -->
        <script
src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
        {% block "ext_js" %}{% endblock %}
    </body>
</html>
<form>
    {% csrf_token %}
    <input type="text" name="x" value="123">
</form>
 
{% for x in lst %}
    <div>...</div>
{% empty %}
    <div>Sorry</div>
{% endfor %}
 {% load static %}
<img src="{% static "img/smile.jpg" %}">
 {% load static %}
<img src="{% get_static_prefix %}img/smile.jpg">

内建的 filter

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。
这种方案存在以下不足:
1.持久化层缺乏弹性。一旦出现业务需求的变更,就必须修改持久化层的接口
2.持久化层同时与域模型与关系数据库模型绑定,不管域模型还是关系数据库模型发生变化,毒药修改持久化曾的相关程序代码,增加了软件的维护难度。

    ORM提供了实现持久化层的另一种模式,它采用映射元数据来描述对象关系的映射,使得ORM中间件能在任何一个应用的业务逻辑层和数据库层之间充当桥梁。Java典型的ORM中间件有:Hibernate,ibatis,speedframework。 
    ORM的方法论基于三个核心原则: 

· 简单:以最基本的形式建模数据。
  · 传达性:数据库结构被任何人都能理解的语言文档化。
  · 精确性:基于数据模型创建正确标准化了的结构。

Cache

 
CACHES = {
    "default": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://127.0.0.1:6379/1",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
            "PICKLE_VERSION": -1,
        }
      }
}

Cookie 和 Session

  1. 开启 Session 中间件: django.contrib.sessions.middleware.SessionMiddleware2. 配置缓存
  2. 配置 Session 引擎: SESSION_ENGINE = "django.contrib.sessions.backends.cache"

Logging

配置

 
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'simple': {
            'format': '%(asctime)s %(module)s.%(funcName)s: %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
        'verbose': { 
            'format': '%(asctime)s %(levelname)s [%(process)d-%(threadName)s] '
                      '%(module)s.%(funcName)s line %(lineno)d: %
            'datefmt': '%Y-%m-%d %H:%M:%S',
    'handlers': {
        'inf': {
'class': 'logging.handlers.TimedRotatingFileHandler', 'filename': 'info.log',
'when': 'W0', # 每周⼀一切割⽇日志
'backupCount': 5,
            'formatter': 'simple',
            'level': 'INFO',
        },
'err': {
'class': 'logging.handlers.TimedRotatingFileHandler', 'filename': 'error.log',
'when': 'D', # 每天切割⽇日志
'backupCount': 30,
'formatter': 'verbose',
'level': 'WARNING',
} },

    'loggers': {
        'inf': {
            'handlers': ['inf'],
            'level': 'DEBUG',
            'propagate': True,
}, 'err': {
(message)s',
        }
},
} }
}

Django 的性能

上一篇 下一篇

猜你喜欢

热点阅读