中间件
什么是中间件:中间件是一个处理Django的请求和响应的框架级别的钩子.
中间件的本质:在Django中就是一个类,在全局范围内改变Django的输入和输出.
Django请求流程图
中间件的五个方法:
process_request(self,request)
执行时间: 在视图函数执行之前
参数: request 跟视图函数中的是同一个
执行顺序: 按照注册顺序 顺着执行
返回值: None 正常流程
HttpResponse对象:
不执行后面中间件中的process_request方法,不执行视图函数,
直接执行当前中间件中的process_response方法,后面正常走.
process_response(self,request,response)
执行时间:在视图函数执行之后
参数:request 跟视图函数中的是同一个
response 视图函数中传递的响应对象
执行顺序:按照注册顺序 倒叙执行
返回值:HttpResponse对象: 必须是响应对象
process_view(self,request,view_func,view_args,view_kwargs)
执行时间:在process_request方法之后,在视图函数执行之前
参数:request 跟视图函数中的是同一个
view_func 视图函数
view_args 视图函数的位置参数
view_kwargs 视图函数的关键字参数
执行顺序:按照注册顺序 顺着执行
返回值: None 正常流程
HttpResponse对象:不执行后面中间件中的process_view方法,不执行视图函数,直接执行最后一个中间件中的process_response方法,后面正常走
process_exception(self,request,exception)
执行时间:出现异常的时候才执行
参数: request 跟视图函数中的是同一个
exception 异常对象
执行顺序: 按照注册顺序 倒叙执行
返回值: None 正常流程
HttpResponse对象:不执行后面中间件中的process_exception方法,直接执行最后一个中间件中的process_response方法,后面正常走
process_template_response(self,request,response)
执行时间:视图函数返回的response对象有一个叫render的方法
参数:request 跟视图函数中的是同一个
response 视图函数中传递的响应对象
执行顺序:按照注册顺序 倒叙执行
返回值:必须返回response对象