Django框架中的中间件
在settings.py文件中这里写的都是django框架用到的中间件
ps:对于字符串的模块名可使用 importlib.import_module(‘模块名’)导入
自定义django中间件
创建MiddleWare.py文件,目录格式如图
创建自定义中间件类
from django.utils.deprecation import MiddlewareMixin
class MW(MiddlewareMixin):
pass
在settings.py注册自定义的中间件,可根据需求调整中间件位置,暂时放在末尾
以上是自定义中间件的格式,下面是实现方法的具体要求
自定义中间件需继承django.utils.deprecation.MiddlewareMixin类,并至少实现以下五个方法之一
方法名 | 参数 | 执行顺序 | 执行条件 | 返回值 | 注释 |
process_request | self, request | 按照注册的顺序(在settings.py里面设置中 从上到下的顺序) | 请求从wsgi拿到之后 | 返回None,继续执行后续的中间件的process_request方法 返回response , 不执行后续的中间件的process_request方法,直接返回response | |
process_response | self,request,response | 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) | 请求有响应的时候 | 必须返回一个response对象 | |
process_view | self, request, view_func, view_args, view_kwargs | 按照注册的顺序(在settings.py里面设置中 从上到下的顺序) | 在urls.py中找到对应关系之后 在执行真正的视图函数之前 | 返回None,继续执行后续的中间件的process_view方法 返回response,直接返回response | view_func:将要执行的视图函数对象 view_args:视图函数的位置参数 view_kwargs:视图函数的关键字参数 |
process_exception | self, request, exception | 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) | 视图函数中抛出异常的时候才执行 | 返回None,继续执行后续中间件的process_exception 返回response,直接返回response | exception:视图函数抛出的异常信息 |
process_template_response | self, request, response | 按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序) | 视图函数执行完,在执行视图函数返回的响应对象的render方法之前 | 返回None,继续执行后续中间件的process_exception 返回response,直接返回response |
Django调用注册的中间件里面五个方法的顺序:
1. process_request
urls.py
2. process_view
view函数
3. 有异常就执行 process_exception
4. 如果视图函数返回的响应对象有render方法,就执行process_template_response
5. process_response
附django请求流程图、process_request、process_response、process_view执行流程图