一、定义
中间件在wsgi和urls之间
二、配置
1、创建.py文件
2、定义中间件
from django.utils.deprecation import MiddlewareMixin class Md1(MiddlewareMixin):
3、setting.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', 'my_middleware.Md1', 'my_middleware.Md2', ]
三、中间件的方法
process_request(self,request)
process_view(self, request, view_func, view_args, view_kwargs)
process_template_response(self,request,response)
process_exception(self, request, exception)
process_response(self, request, response)
process_request 和 process_response最为重要
process_view其次
其它了解即可
1、process_request
执行顺序:注册顺序
何时执行:wsgi之后
返回值:
None,继续执行后续的中间件的process_request方法
返回response , 不执行后续的中间件的process_request方法
2、process_response
执行顺序:注册顺序倒序
何时执行:请求响应的时候
返回值: 必须要有返回值
返回原来的响应
return response
3、process_view
执行顺序:注册顺序
何时执行:urls.py之后,views.py之前
返回值:
返回None,继续执行后续的中间件的process_view方法
返回response,不执行后续的中间件的process_view方法,它将执行中间件的process_response方法并将应用到该HttpResponse并返回结果
4、process_exception
执行顺序:注册倒序
何时执行:views中有异常抛出
返回值:
返回None,继续执行后续的中间件的process_exception方法
返回response, 它将执行中间件的process_response方法并将应用到该HttpResponse并返回结果
5、process_template_response
执行顺序:注册倒序
何时执行:视图函数中有render(),视图函数执行完后,立刻执行
返回值:
返回None,继续执行后续中间件的process_exception
返回response,
四、总结
中间件5个方法的顺序
1、process_request
2、process_view
3、process_exception 有异常
4、process_template_response render()方法
5、process_response 必须要有返回值