目录
一、中间件 - 介于request(请求)与response(响应)处理之间的一道处理过程
3-1 process_request、process_response - 请求响应方法
3-2-1 process_view 返回为 None 的情况下照常执行
3-2-2 process_view 有返回值, 过其他的process_view以及视图函数
3-3 process_exception - 视图函数中出现异常,执行方法
3-4 process_template_response(self,request,response) - 视图函数的返回值是含有render方法类的对象时,调用方法
一、中间件 - 介于request(请求)与response(响应)处理之间的一道处理过程
中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变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.
1-1 中间件的意义和功能
如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,这些都可以通过中间件来实现。
可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。
''' Django默认的中间件: 在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件 ''' MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
二、 自定义中间件
结果:
- 导入模块 - 必须继承MiddlewareMixin
from django.utils.deprecation import MiddlewareMixin
class MiddlewareMixin: def __init__(self, get_response=None): self.get_response = get_response super().__init__() def __call__(self, request): response = None if hasattr(self, 'process_request'): response = self.process_request(request) response = response or self.get_response(request) if hasattr(self, 'process_response'): response = self.process_response(request, response) return response
- 自定义中间件 - 在app文件夹内创建自己的middelware.py中间件创建文件
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import HttpResponse # 必须继承MiddlewareMixin class Md1(MiddlewareMixin): def process_request(self,request): print("Md1请求") def process_response(self,request,response): print("Md1返回") return response class Md2(MiddlewareMixin):