Django的请求生命周期与中间件中的5中方法

 

请求生命周期:

客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端

 

中间件:

在全局层明处理请求和响应的

form django.utils. deprecation import MiddlaraMixin

5种方法与4个要点:执行顺序,执行时间,参数,返回值

方法:
process_request

process_views

process_exception

process_response

process_template_response

 

process_request(self,request)

参数:request

返回值:

None:正常流程,继续执行下一个中间件的process_request(按照中间件的注册顺序);

HttpResponse对象:下面中间件的方法不再执行,直接执行当前中间件的process_response方法,然后倒叙向上执行同一个方法;

执行顺序:按中间件注册顺序,顺序执行

执行时间:WSGI之后,路由匹配之前;

process_view(self,request,func_name,callback_args,callback_kwargs)

参数:request,func_name,callback_args,callback_kwargs

返回值:

  None:正常流程

  HttpResponse对象: 下面中间件的同方法不执行,视图函数也不执行,直接执行最后一个中间件的process_response方法,倒序向上执行此方法;

执行顺序:按照中间件注册顺序,顺序执行

执行时间:视图函数之前,路由匹配之后,

process_response(self,request,response)

参数:request,

  response  返回给浏览器的响应对象

返回值:

  None:正常流程

  HttpResponse对象: 正常流程,继续执行中间件的同方法,必须返回的

执行顺序:按照中间件注册顺序,倒叙序执行

执行时间:视图函数之后,进入WSGI之前

process_exception(self,request,exception)

#处理视图层明的异常

参数:request,

  exception:视图发生的错误对象

返回值:

  None:交个下一个中间件处理,最后交个django处理

  HttpResponse对象:执行最后一个中间件的process_response方法,倒叙向上执行

执行顺序:按照中间件注册顺序,倒叙序执行

执行时间(触发条件):视图函数发生错误之后,被调用,

 

process_template_response(self,request,response)

  return response

参数:request,

  response:返回的响应对象

返回值:

  HttpResponse对象:必须返回,倒叙向上执行

执行顺序:按照中间件注册顺序,倒叙序执行

执行时间(触发条件):视图函数返回TemplateResponse对象或Response对象有render方法

 

 

 

posted @ 2019-08-18 10:19  adrrfsfsd  阅读(216)  评论(0编辑  收藏  举报