Django 五——中间件、缓存、CSRF、信号、Bootstrap(模板)

内容概要:

1、Django的请求生命周期是怎么样的?

2、中间件

3、CSRF补充

4、信号

5、Bootstrap(模板)


1、Django的请求生命周期是怎么样的?

(即请求发起到返回都经历了什么?)

用户发起请求,经过中间件,到达路由系统,分发给views是凸函数,然后去数据库拿数据,去模板中拿模板,经过渲染,在经过中间件返回给用户。

2、中间件

用处:可用于做过滤器,过滤黑名单,适用于所有的请求都要处理的情况

(而只需要对某些请求做处理时,直接在views函数里面写装饰器即可)

自定义方法

md文件夹中==》hxl.py

from django.utils.deprecation import MiddlewareMixin

class MyMiddlewareMixin(object): #将MiddlewareMixin类里面的东西拿过来复制一份,重命名类,
    # 自己定义的中间件就继承重命名后的类,这样以后不管版本如何变化,都能这样来定义中间件
    def __init__(self, get_response=None):
        self.get_response = get_response
        super(MyMiddlewareMixin, self).__init__()

    def __call__(self, request):
        response = None
        if hasattr(self, 'process_request'):
            response = self.process_request(request)
        if not response:
            response = self.get_response(request)
        if hasattr(self, 'process_response'):
            response = self.process_response(request, response)
        return response

class HXL(MyMiddlewareMixin):
    def process_request(self,request):
        print('hxl-->process_request')

    def process_response(self,request, response):
        print('hxl-->process_response')
        return response

class GYC(MyMiddlewareMixin):
    def process_request(self,request):
        print('gyc-->process_request')

    def process_response(self,request, response):
        print('gyc-->process_response')
        return response

settings.py里面

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'md.hxl.HXL',
    'md.hxl.GYC',
]

  urls.py里面

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/', views.index),
]

  views.py里面

from django.shortcuts import render,HttpResponse
def index(request):
    print('test')
    return HttpResponse('test!!!')

 

3、缓存(3种应用,5种配置)

(1)全站缓存:settings里面加两个中间件

(2)单独视图缓存

(3)视图函数里面的某一块缓存

4、CSRF(跨站伪造请求)

全站都用csrf时:

Form提交时:

(1)、需用render

(2)、{% csrf_token %}

  ajax提交时:

(1)、在cookie中提取创始人斧头砍对应的随机字符串

(2)、设置请求头:

X-CSRFToken:cookie中取到得值

或用$.ajaxsetup

全站都不用,仅某几个用csrf,用装饰器@csrf_protect

全站都用,仅某几个不用csrf时,用装饰器@csrf_exempt

5、信号

Django内部定义的信号,可在制定的位置注入指定的操作

——内置信号:

a指定信号中注入函数

——自定义信号:

a创建信号

b指定信号中注入函数

c在程序中触发函数

6、Bootstrap(模板)——响应式+模板

即集成了css和js的文件夹

css——响应式:用@media,如container、栅(shan)格

js——应用:先引入jquery.js,再引入bootstrap.js

多看模板

参考博客:

wu.sir

http://www.cnblogs.com/wupeiqi/articles/5246483.html 

 

原文地址:https://www.cnblogs.com/tangtingmary/p/8097589.html