【Django】中间件的使用、常用方法、执行顺序

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',
]

运行程序,我们可以看到中间件的执行顺序

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39147299/article/details/108269572