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