Django之中间件

Django之中间件

一、请求流程

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

 

  也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。

二、中间件的介绍

中间件中可以定义5个方法,分别是:

  1. process_request(self,request) 发送请求
  2. process_view(self, request, callback, callback_args, callback_kwargs) 执行完 request 预处理函数并确定待执行的 view 之后,但在 view 函数实际执行之前。
  3. process_template_response(self,request,response)
  4. process_exception(self, request, exception) 收集错误信息
  5. 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的 方法是当视图函数出错的时候再去执行执行异常函数,一般在写视图函数的时候已经写了抛出异常,这个方法在中间件中比较少用到。

 

posted @ 2018-01-05 10:41  ShengLeQi  阅读(100)  评论(0)    收藏  举报