自定义中间件 middleware

发布时间 2023-10-28 13:08:09作者: PiggThird

文件夹的创建

1、在项目或者应用下创建一个任意名称的文件夹
2、在该文件夹下创建一个任意名称的py文件
3、在该py文件中写自定义的中间件(这个类必须继承MiddlewareMixin)
      然后在这个类里面就可以自定义五个方法了
	(这五个方法并不是全部都需要书写,用几个写几个)

中间件模板

from django.utils.deprecation import MiddlewareMixin


class MyMiddleware(MiddlewareMixin):  # 必须继承 MiddlewareMixin 这是中间件的核心
    # process_request 和 process_response 这两个必须掌握
    def process_request(self, request):
        print('这是我第一个自定义中间件内的process_request方法')
        return HttpResponse('第一个自定义中间件内的process_request方法')

    def process_response(self, request, response):
        print('这是我第一个自定义中间件内的process_response方法')
        return response

了解方法

了解即可
    process_view
    	# def process_view(self, request, view_name, *args, **kwargs)
        路由匹配成功之后执行视图函数之前,会自动执行中间件里面的该方法
        顺序是按照配置文件中注册的中间件从上往下的顺序依次执行

    process_template_response(特别奇葩,基本不用)
    	# def process_template_response(self, request, response)
        返回的HttpResponse对象必须有render属性的时候才会触发
        顺序是按照配置文件中注册了的中间件从下往上依次经过
        def index(request):
            print('我是视图函数index')
            obj = HttpResponse('index')
            def render():
                print('内部的render')
                return HttpResponse('我是视图层里面的render方法')
            obj.render = render
            return obj

    process_exception
    	# def process_exception(self, request, exception)
        当视图函数中出现异常的情况下触发
        顺序是按照配置文件中注册了的中间件从下往上依次经过

最重要的千万别忘记注册!!!

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',
    '你自己写的中间件的路径1',
    '你自己写的中间件的路径2',
    '你自己写的中间件的路径3',
]