Django的请求生命周期与中间件中的5中方法
请求生命周期:
客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端
中间件:
在全局层明处理请求和响应的
form django.utils. deprecation import MiddlaraMixin
5种方法与4个要点:执行顺序,执行时间,参数,返回值
方法:
process_request
process_views
process_exception
process_response
process_template_response
process_request(self,request)
参数:request
返回值:
None:正常流程,继续执行下一个中间件的process_request(按照中间件的注册顺序);
HttpResponse对象:下面中间件的方法不再执行,直接执行当前中间件的process_response方法,然后倒叙向上执行同一个方法;
执行顺序:按中间件注册顺序,顺序执行
执行时间:WSGI之后,路由匹配之前;
process_view(self,request,func_name,callback_args,callback_kwargs)
参数:request,func_name,callback_args,callback_kwargs
返回值:
None:正常流程
HttpResponse对象: 下面中间件的同方法不执行,视图函数也不执行,直接执行最后一个中间件的process_response方法,倒序向上执行此方法;
执行顺序:按照中间件注册顺序,顺序执行
执行时间:视图函数之前,路由匹配之后,
process_response(self,request,response)
参数:request,
response 返回给浏览器的响应对象
返回值:
None:正常流程
HttpResponse对象: 正常流程,继续执行中间件的同方法,必须返回的
执行顺序:按照中间件注册顺序,倒叙序执行
执行时间:视图函数之后,进入WSGI之前
process_exception(self,request,exception)
#处理视图层明的异常
参数:request,
exception:视图发生的错误对象
返回值:
None:交个下一个中间件处理,最后交个django处理
HttpResponse对象:执行最后一个中间件的process_response方法,倒叙向上执行
执行顺序:按照中间件注册顺序,倒叙序执行
执行时间(触发条件):视图函数发生错误之后,被调用,
process_template_response(self,request,response)
return response
参数:request,
response:返回的响应对象
返回值:
HttpResponse对象:必须返回,倒叙向上执行
执行顺序:按照中间件注册顺序,倒叙序执行
执行时间(触发条件):视图函数返回TemplateResponse对象或Response对象有render方法