Django之中间件
Django之中间件
一、请求流程
我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse ,这个请求传递到 Django的过程如下:

也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。
二、中间件的介绍
中间件中可以定义5个方法,分别是:
- process_request(self,request) 发送请求
- process_view(self, request, callback, callback_args, callback_kwargs) 执行完 request 预处理函数并确定待执行的 view 之后,但在 view 函数实际执行之前。
- process_template_response(self,request,response)
- process_exception(self, request, exception) 收集错误信息
- process_response(self, request, response) 必须返回 HttpResponse 对象. 这个 response 对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。
=》执行顺序也是按照以上顺序执行的.
演示:
1、自定义中间件middlewares:

2、setting配置文件

3、执行结果:

为啥报错了呢?
因为 自定义的中间件response方法没有return,交给下一个中间件,导致http请求中断了!!!
正常执行:

1、 对process_view方法的测试:
1、 process_view(self, request, callback, callback_args, callback_kwargs)方法介绍
(1)执行完所有中间件的request方法‘
(2)url匹配成功
(3)拿到 视图函数的名称、参数,(注意不执行) 再执行process_view()方法
(4)最后去执行视图函数
(5)执行process_response方法
2、process_exception方法
process_exception的 方法是当视图函数出错的时候再去执行执行异常函数,一般在写视图函数的时候已经写了抛出异常,这个方法在中间件中比较少用到。

浙公网安备 33010602011771号