django中间件

一. 自定义中间件: (可定义五个方法)

process_request(self,request)

process_view(self, request, view_func, view_args, view_kwargs)

process_template_response(self,request,response)

process_exception(self, request, exception)

process_response(self, request, response)

 二. 各方法执行顺序

>中间件中但凡有一个process_request返回HttpResponse对象,则立马通过自己的process_response

   以及自己之前的中间件中process_response将对象传递给浏览器; 该中间件之后的其它中间件和视图

   函数都不会执行,所有的process_view也不会执行.

>process_request有一个参数,就是request,这个request和视图函数中的request是一样的。

 它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下

 一个中间件处理,如果是HttpResponse对象,Django将不执行视图函数,而将响应对象返回给浏览器。

>当流程通过所有process_request时都返回None,则会执行process_view方法,如所有的process_view

  都返回None,则开始执行视图函数; 但凡其中有一个返回个对象,则跳过其下中间件中的所有process_view

  方法和视图函数,直接倒叙执行中间件中的process_response

注意: 所有的process_response都必须且只能返回个httpresponse对象.

三. 以上为常用的3中方法,后两种方法如下:

    process_exception  process_template_response简述

  1. process_exception(self, request, exception)

该方法两个参数:

一个HttpRequest对象

一个exception是视图函数异常产生的Exception对象。

这个方法只有在视图函数中出现异常了才执行,它返回的值可以是一个None也可以是一个HttpResponse对象。

如果是HttpResponse对象,Django将调用模板和中间件中的process_response方法,并返回给浏览器,否则

将默认处理异常。如果返回一个None,则交给下一个中间件的process_exception方法来处理异常。它的执行

顺序也是按照中间件注册顺序的倒序执行。

   2. process_template_response(self, request, response)

它的参数,一个HttpRequest对象,responseTemplateResponse对象(由视图函数或者中间件产生)。

process_template_response是在视图函数执行完成后立即执行,但它有一个前提条件,那就是视图函数返

回的对象有一个render()方法(或者表明该对象是一个TemplateResponse对象或等价方法)。

 

 

posted @ 2018-11-04 18:09  叶落kiss  阅读(128)  评论(0编辑  收藏  举报