django的中间件是全局范围内处理django的请求和响应的框架级别的钩子。
#定义 from django.utils.deprecation import MiddlewareMixin class MD1(MiddlewareMixin): def process_request(self,request): pass #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', 'app01.middlewares.my_middleware.MD1', 'app01.middlewares.my_middleware.MD2', ]
五个方法
执行时间:
路由匹配之前,process_view方法前
参数:
request 请求的对象 ,和后续的request都是同一个
执行顺序:
按照注册的顺序 顺序 执行
返回值:
None 正常流程
HttpResponse对象 当前中间件之后的中间件中的process_request、路由匹配、process_view、视图都不执行,直接去执行当前中间件的process_response方法
process_response(self,request,response):
执行时间:
视图之后执行
参数:
request 请求的对象 ,和后续的request都是同一个
response 返回给浏览器的响应对象
执行顺序:
按照注册的顺序 倒序 执行
返回值:
HttpResponse对象 必须返回
process_view(self,request,view_func,view_args,view_kwargs):
执行时间:
路由之后,视图之前执行
参数:
request 请求的对象 ,和后续的request都是同一个
view_func 视图函数
view_args 视图函数所需的位置参数
view_kwargs 视图函数所需的关键字参数
执行顺序:
按照注册的顺序 顺序 执行
返回值:
None 正常流程
HttpResponse对象 当前中间件之后的中间件中的process_view、视图都不执行,直接去执行最后一个中间件的process_response方法
执行时间(触发条件):
视图中有异常时才执行
参数:
request 请求的对象 ,和后续的request都是同一个
exception 异常的对象
执行顺序:
按照注册的顺序 倒序 执行
返回值:
None 当前的中间件没有处理异常,交于下一个中间处理,如果所有的都没有处理,django处理异常
HttpResponse对象 当前的中间件处理了异常,后面要执行的process_exception方法就不执行了,执行最后一个中间件的process_response方法
process_template_response(self,request,response):
执行时间(触发条件):
视图返回TemplateResponse对象
参数:
request 请求的对象 ,和后续的request都是同一个
response TemplateResponse对象
执行顺序:
按照注册的顺序 倒序 执行
返回值:
HttpResponse对象 必须返回
处理对象
response.template_name 模板的名字