中间件
一. 中间件的概念
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且
在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能。
二.Django默认的中间件
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',
]
每一个中间件都有具体的功能
三.自定义中间件
1.中间件一共有四个方法
process_request
process_view
process_exception
process_response
2.请求发送响应流程图
3.当用户发起请求的时候会依次经过所有的中间件,依次经过中间件中的process_request函数,最后到达视图函数, 中视图函数处理完成后,再依次穿过中间件中的process_response,最后由wsgi.py对响应进行封装,发送给浏器.
- 自定义中间件
process_request,process_response方法
(1)自定义的类必须继承MiddlewareMixin,需要导入
from django.utils.deprecation import MiddlewareMixin
在settings中:
在视图中:
在自定义的中间件中:
结果:
注:如果请求在中间件1的process_request中被return,将会直接走中间件1的process_response,然后返回
如:
结果:
流程图如下:
也可以在返回的途中被某个中间件的process_response偷梁换柱
如:
结果为:
process_view方法
结果:
流程图如下:
中间件可以用来提前调用视图函数
如:
结果:
流程图如下:
process_exception
结果:
注:在以上的代码中,process_exception并不会执行,只有当views出现错误是时,才会执行
如:当views中出现错误时