1.中间件
中间件可以介入Django的请求和响应处理过程,修改Django的输入或输出,简单来说,中间件就是在每次执行之前都会被拦截处理,之后再继续执行本来的业务
使用场景: 当某些操作在每次请求或响应时都会执行时,可以写在中间件中
特点: 面向切面编程、无侵害式编程,不用直接修改框架源码,就可以达到自己想要的执行结果
我们可以在Django项目的settings.py配置文件中找到有关中间件的设置列表MIDDLEWARE
2.中间件的常用方法
Django的中间件会执行6个方法
# 初始化时调用
def __init__(self, get_response=None):
pass
# 处理收到的请求前调用
def process_request(self, request):
pass
# 处理视图函数前调用
def process_view(self, request, view_func, view_args, view_kwargs):
pass
# 处理模板前调用
def process_template_response(self, request, response):
pass
# 返回相应数据之前调用
def process_response(self, request, response):
pass
# 当发生异常时调用
def process_exception(self, request,exception):
pass
3.执行顺序
我们可以写一个自定义的中间件,但是必须要继承Django的中间件类MiddlewareMixin,自定义的类可以实现上面的一个或多个方法
middleware.py
from django.utils.deprecation import MiddlewareMixin
class TestMiddleware1(MiddlewareMixin):
def __init__(self, get_response=None):
super().__init__()
self.get_response = get_response
print('初始化,test1')
def process_request(self, request):
print('处理请求前,test1')
def process_view(self, request, view_func, view_args, view_kwargs):
print('处理视图前,test1')
def process_response(self, request, response):
print('响应前,test1')
return response
class TestMiddleware2(MiddlewareMixin):
def __init__(self, get_response=None):
super().__init__()
self.get_response = get_response
print('初始化,test2')
def process_request(self, request):
print('处理请求前,test2')
def process_view(self, request, view_func, view_args, view_kwargs):
print('处理视图前,test2')
def process_response(self, request, response):
print('响应前,test2')
return response
settings.py
# 注册自定义的中间件
MIDDLEWARE = [
...
'middleware.TestMiddleware1',
'middleware.TestMiddleware2',
]
运行程序,我们可以看到中间件的执行顺序