进一步理解Django中的middleware

首先,Django文档中是这样描述的:Middleware is a framework of hooks into Django’s request/response processing. It’s a light, low-level “plugin” system for globally altering Django’s input or output.

也就是说中间件是一个钩子框架可以理解为过滤器,可以过滤发送到Django视图层的请求,也可以过滤视图层发送给前端的响应.它是一个轻量级的底层插件系统,用途在全局修改Django的输入或者输出。

我们在进行视图编写的时候会频繁用到request.user,这个user属性是怎么来的呢?

其实在Django默认提供的中间件AuthenticationMiddlewar,这个中间件在每个view视图函数执行之前,把user设置为request的属性

Django 在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干
预,方法如下:

1.初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件。

def __init__():
   pass

2.处理请求前:在每个请求上调用,返回 None 或 HttpResponse 对象。
def process_request(request):
  pass

3.处理视图前:在每个请求上调用,返回 None 或 HttpResponse 对象。
def process_view(request, view_func, view_args, view_kwargs):
  pass

4.处理模板响应前:在每个请求上调用,返回实现了 render 方法的响应对象。

def process_template_response(request, response):
  pass

5.处理响应后:所有响应返回浏览器之前被调用,在每个请求上调用,返回 HttpResponse 对象。
def process_response(request, response):
  pass

6.异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个 HttpResponse 对象。
def process_exception(request,exception):
  pass

而且

中间件的执行顺序非常重要

在请求视图被处理,中间件由上至下依次执行。

在请求视图被处理,中间件由下至上依次执行。

 

 

猜你喜欢

转载自www.cnblogs.com/mumei/p/9343622.html