1.中间件的定义
  中间件是一个用来处理Django请求和响应的框架级别的钩子,它是一个轻量级,低级别的插件系统,用于在全局范围内改变Django的输入和输出,每个中间件都负责一些特定的功能。

2.中间件的五个固定方法
2.1 process_request(self,request)  # 处理请求的
  执行顺序
    按照注册的顺序(在settings.py里面的中间件设置中,按照从上到下的顺序执行)

  返回值
    默认返回None,然后继续执行后面的中间件中的process_request方法
    如果返回response,不执行后续的中间件中的process_request方法


2.2 process_response(self,request,response)  # 处理响应
  执行顺序
    按照注册顺序的倒序执行,(在settings.py中间件配置中,从下往上的顺序执行)

  返回值
    必须返回一个response,可以在自定义返回值
    如果views中函数有返回值则被process_response中的返回值所代替


2.3 process_view(self,request,view_func,view_args,view_kwargs)    # 处理视图
  执行顺序
    按照注册的顺序(在settings.py里面的中间件设置中,按照从上到下的顺序执行)

  何时执行
    在执行urls.py之后,views.py之前,这个方法被执行,如果有一个process_view有一个response返回值,就不在继续执行views.py中的函数了,会直接执行process_response方法

  返回值
    默认返回None,继续执行后续中间件中的process_view方法
    如果返回response,则默认返回process_response中的返回值



2.4 process_exception(self,request,exception)  # 处理异常
  执行顺序
    按照注册顺序的倒序执行,(在settings.py中间件配置中,从下往上的顺序执行)

  何时执行
    视图函数中抛出异常的时候才执行

  返回值
    返回None,继续执行后续中间件中的process_exception方法
    返回response对象

2.5 process_template_response(self,request,response)  # 处理模板
  执行顺序
    按照注册顺序的倒序执行,(在settings.py中间件配置中,从下往上的顺序执行)

  何时执行
    视图函数执行完,在执行视图函数返回的响应对象的render方法之前

  返回值
    返回None,继续执行后续中间件中的process_template_response方法
    返回response对象


Django调用中间件的顺序:process_request  --->  urls.py  --->  process_view  --->  有异常执行process_exception,有render方法执行process_template_response  --->  process_response

posted on 2019-02-28 14:49  花豆豆  阅读(71)  评论(0编辑  收藏  举报