[Python]Django中间件

  • Post author:
  • Post category:python


在这里插入图片描述




前言

系列文章目录


[Python]目录


视频及资料和课件

链接:

https://pan.baidu.com/s/1LCv_qyWslwB-MYw56fjbDg?pwd=1234


提取码:1234





1. 中间件简介

中间件就是伴随请求和响应的时候会发生的事情。

在这里插入图片描述

Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。

中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。

我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。



2. 中间件的定义

定义中间件,就是在请求的处理函数外再包一层函数。即使用闭包修饰请求的处理函数。

中间件的应用场景:例如,中间件可以在进行相应的请求处理前,判断用户是否登录过

# 定义一个中间件
# 在请求处理前输出 before request
# 在请求处理后输出 after request
# 参数get_response为请求的处理函数
def simple_middleware(get_response):
    def middleware(request):
        print('before request')
        # 调用请求的处理函数处理请求
        response = get_response(request)
        print('after request')
        # 返回请求的响应
        return response
    
    # 返回中间件处理后的请求处理函数
    return middleware
        



3. 中间件的注册

在这里插入图片描述



4. 中间件测试

中间件在每次请求和响应都会调用,不管调用任何请求都会触发中间件

在这里插入图片描述



5. 多个中间件的执行顺序

  • 在请求视图(请求处理函数)处理前,中间件由上至下依次执行
  • 在请求视图(请求处理函数)处理后,中间件由下至上依次执行

在这里插入图片描述

定义两个中间件:

# 定义一个中间件
# 在请求处理前输出 before request
# 在请求处理后输出 after request
# 参数get_response为请求的处理函数
def simple_middleware1(get_response):
    def middleware(request):
        print('before request 111111111111111111')
        # 调用请求的处理函数处理请求
        response = get_response(request)
        print('after request 111111111111111111')
        # 返回请求的响应
        return response

    # 返回中间件处理后的请求处理函数
    return middleware


def simple_middleware2(get_response):
    def middleware(request):
        print('before request 222222222222222222222')
        # 调用请求的处理函数处理请求
        response = get_response(request)
        print('after request 222222222222222222222')
        # 返回请求的响应
        return response

    # 返回中间件处理后的请求处理函数
    return middleware

注册中间件:

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',
    # 注册中间件
    'login.middleware.simple_middleware1',
    'login.middleware.simple_middleware2'
]

在这里插入图片描述



6. 补充

def simple_middleware(get_response):
	
	# 中间件第一次执行,会执行此处代码

    def middleware(request):
        print('before request')
        # 调用请求的处理函数处理请求
        response = get_response(request)
        print('after request')
        # 返回请求的响应
        return response
    
    # 返回中间件处理后的请求处理函数
    return middleware
        

过滤路径需要通过类中间件实现。

以类的形式实现中间件:

Django—中间件详解



版权声明:本文为m0_53022813原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。