Django中间件
中间件
中间件 - 是一个轻量级 底层的插件系统, 可以介入Django的请求和响应过程,修改Django的输入或输出 - 每个中间件组件是一个独立的Python类.可以定义下面方法中的一个或多个 __init__: 无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件 process_request(request): 执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 process_view(request,view_func,view_args,view_kwargs): 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象 process_template_response(request.response): 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象 process_response(request,response): 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpReponse对象 process_exception(request,response,exception): 当视图抛出异常时调用,在每个请求上调用,返回一个HttpResponse对象 - 如果你想干预哪个环节 只需编写对应的类做处理并注册到中间件调用的配置文件中
from django.conf import settings from django.shortcuts import redirect class MiddlewareMixin(object): def __init__(self, get_response=None): self.get_response = get_response super(MiddlewareMixin, self).__init__() def __call__(self, request): response = None if hasattr(self, 'process_request'): response = self.process_request(request) if not response: response = self.get_response(request) if hasattr(self, 'process_response'): response = self.process_response(request, response) return response class M1(MiddlewareMixin): def process_request(self,request): print('m1.process_request') def process_response(self,request,response): print('m1.process_response') return response class M2(MiddlewareMixin): def process_request(self,request): print('m2.process_request') def process_response(self,request,response): print('m2.process_response') return response