Django之中间件Middleware笔记

/ 0评 / 0
  1. 中间件是Django请求/响应处理的钩子框架。它是一个轻量级,底层的“插件”系统,用于全局改变Django的输入或输出。

  2. 每个中间件组件负责特定的功能。如:AuthenticationMiddleware它使用户与请求关联起来。

  3. 中间件类:

    • 中间件类须继承自django.utils.deprecation.MiddlewareMixin类
    • 中间件类须实现下列5个方法中1个或者多个:
      1. def process_request(self,request):执行路由之前被调用,在每个请求上调用,返回None或HttpResponse对象
      2. def process_view(self,request,callback,callback_args,callback_kwargs):调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
      3. def process_response(self,request,response):所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象
      4. def process_esxception(self,request,exception):当处理过程中抛出异常时调用,返回一个HttpResponse对象
      5. def process_template_reponse(self,request,response):在视图函数执行完毕且试图返回对象中包含render方法时被调用;该方法需要返回实现了render方法的响应对象
    • 中间件中的大多数方法在返回None时表示忽略当前操作进入下一项事件,当返回HttpResponese对象时表示此请求结束,直接返回给客户端
  4. 编写中间件类:

    # file : middleware/mymiddleware.py
    from django.http import HttpResponse
    from django.utils.deprecation import MiddlewareMixin
    ​
    class MyMiddleWare(MiddlewareMixin):
    def process_request(self, request):
        print("中间件方法 process_request 被调用")
    ​
    def process_view(self, request, callback, callback_args, callback_kwargs):
        print("中间件方法 process_view 被调用")
    ​
    def process_response(self, request, response):
        print("中间件方法 process_response 被调用")
        return response      
    
  5. 注册中间件

    # file : settings.py
    MIDDLEWARE = [
        ...
    ]
    
  6. 中间件执行过程

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注