Django之 中间件
中间件
介绍
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。django中自带如下7个中间件,在setting配置可见,如下:
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', ]
概念
中间件是一个类(类里面可以定义方法)
方法(待补充):
proces_request(返回值可有可无),process_response(必须设置返回值:response)
定义
以后想要对所有的请求做统一操作时,用中间件。
只是对少量的视图函数做操作时,用装饰器。
Django的请求生命周期
自定义django中间件
除了django自带如上7种中间件,我们为了满足自己的需求,也可自定义中间件,中间件就是定义一个类,类的下面有四个方法,分别为process_request、process_view、process_exception及process_response,但此类必须但是必须继承MiddlewareMixin,引入方式如下:django.utils.deprecation
import
MiddlewareMixin。
自定义中间件实例如下,中间件.py文件必须放在django项目的根目录下,中间件的配置方式与自带中间件配置方式一致。如下实例:
中间件执行顺序
中间件被执行的顺序
如上,中间件的执行顺序是按照如上中间件配置顺序执行的,从上到下,依次执行中间件中的process_request函数,然后根据url执行所有views视图函数,视图函数执行完后,再从后依次往前执行process_response函数。
但是需要注意,如下为请求的视图函数和自定义的中间件:
views函数:
def index(request): print("view函数...") return HttpResponse("OK")
中间件:
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse class Md1(MiddlewareMixin): def process_request(self,request): print("Md1请求") #return HttpResponse("Md1中断") def process_response(self,request,response): print("Md1返回") return response class Md2(MiddlewareMixin): def process_request(self,request): print("Md2请求") def process_response(self,request,response): print("Md2返回") return response
此时输出结果顺序为:
Md1请求 Md2请求 视图函数 Md2返回 Md1返回
SessionMiddleware
class Md3(SessionMiddleware): def process_request(self, request): print("Md3请求") def process_response(self, request, response): print("Md3返回") return response class Md4(SessionMiddleware): def process_request(self, response): print("Md4请求") def process_response(self, request, response): print("Md4返回") return response
- Django自定义中间件简单介绍
- django 使用中间件 访问request里面的内容
- Django中间件处理流程学习笔记
- Django middleware中间件理解
- django数据库操作和中间件
- Django 补充models操作,中间件, 缓存,信号,分页
- 图解django 中间件
- django页面请求sql分析中间件
- 深入学习Django源码基础13 - Django中的中间件(middleware)
- Django之中间件
- Python开发【Django】:中间件、CSRF
- Django分析之Middleware中间件
- Django源码分析4:staticfiles静态文件处理中间件分析
- django -- cbv,fbv,中间件
- Django中间件学习笔记
- django框架--中间件系统
- Django中间件实现拦截器(转载)
- 简介Django中内置的一些中间件
- Django:之中间件、微信接口和单元测试