14-中间件和上下文处理器

14-中间件和上下文处理器

01-中间件

02-上下文处理器

01-中间件

在http请求 到达视图函数之前   和视图函数return之后,django会根据自己的规则在合适的时机执行中间件中相应的方法。

中间件的执行流程

1、执行完所有的request方法 到达视图函数。

2、执行中间件的其他方法

2、经过所有response方法 返回客户端。

注意:如果在其中1个中间件里 request方法里 return了值,就会执行当前中间的response方法,返回给用户 然后 报错。。不会再执行下一个中间件。

 

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

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

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

  1. process_request(self,request) :执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
  2. process_view(self, request, callback, callback_args, callback_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
  3. process_template_response(self,request,response):在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
  4. process_exception(self, request, exception) 当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象
  5. process_response(self, request, response 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象

执行顺序也是按照以上顺序执行的.

 中间件注册

中间件例子

 

方法二:类的方式写中间件 

02-上下文处理器

上下文处理器放在项目目录下(context processors)
上下文处理器是可以返回一些数据,在全局模板中都可以使用。比如登录后的用户信息,在很多页面中都需要使用,
那么我们可以放在上下文处理器中,就没有必要在每个视图函数中都返回这个对象
Django中的Context Processor主要是应用于模板,完成页面的绘制的一些处理,也就是所说的页面渲染

激活(注册):在 settings.py 文件里的 TEMPLATES  中的 OPTIONS  中的 'context_processors' 里面添加自定义的上下文处理器的全路径(添加到最后)

自定义上下文管理器(返回必须是字典)

 自定义上下文管理器使用:{{ name }}

 

原文地址:https://www.cnblogs.com/jun-1024/p/10860887.html