Django高级扩展之中间件

中间件是Django请求/响应处理的钩子框架。它是一个轻量级的、低级的“插件”系统,用于全局改变Django的输入或输出。每个中间件组件负责实现一些特定的功能。例如,Django包含一个中间件组件AuthenticationMiddleware,它使用会话将用户与请求关联起来。

目录

方法介绍

__init__

process_request(self, request)

process_view(self, request_view_func, view_args,view_kwargs)

process_template_response(self, request,reponse)

process_response(self, request,reponse)

process_exception(self, request,exception)

默认中间件

自定义中间件

函数方式

创建中间件

中间件注册

请求验证

类方式

创建中间件

引入

定义类和请求处理

配置中间件

请求验证

总结

参考文章


方法介绍

__init__

不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否启用该中间件。

process_request(self, request)

在执行视图之前被调用(分配url匹配视图之前),每个请求都会调用,返回None或者HttpResponse对象。

process_view(self, request_view_func, view_args,view_kwargs)

调用视图之前执行,每个请求都会调用,返回None或者HttpResponse对象。

process_template_response(self, request,reponse)

在视图刚好执行完后调用,每个请求都会调用,返回None或者HttpResponse对象。

使用render时。

process_response(self, request,reponse)

所有相应返回浏览器之前调用,每个请求都会调用,返回None或者HttpResponse对象。

process_exception(self, request,exception)

当视图抛出异常时调用,返回HttpResponse对象。

默认中间件

在项目配置settings.py中。

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

自定义中间件

工程目录project下创建middleware/应用名称/目录层级。

如下图所示:

Django高级扩展之中间件_第1张图片

函数方式

创建中间件

可通过函数方式来定义中间件。

在middleware目录下创建funMiddle.py,内容如下:

def funMiddle(get_response):
    def middleware(request):
        response = get_response(request)

        print('这是函数方法中间件')
        print('参数:', request.GET.get('name'))

        return response

    return middleware

中间件注册

在settings.py中注册。

Django高级扩展之中间件_第2张图片

请求验证

路由

# 中间件
path('middle_test', views.middle_test, name='middle_test'),

视图

def middle_test(request):

    print('这里是视图,参数为', request.GET.get('name'))

保存后运行项目,浏览器访问后控制器查看结果:

Django高级扩展之中间件_第3张图片

类方式

创建中间件

创建testMiddle.py文件

引入

在testMiddle.py中引入

from django.utils.deprecation import MiddlewareMixin

定义类和请求处理

定义testMIddle类,并设置方法接收get请求的参数并打印。

class testMiddle(MiddlewareMixin):

    def process_request(self, request):
        print("GET请求参数为:", request.GET.get('name'))

配置中间件

修改settings.py,最下面添加testMiddle类。

Django高级扩展之中间件_第4张图片

请求验证

路由和视图不用更改。

运行项目,请求浏览器并通过控制台查看结果:

 Django高级扩展之中间件_第5张图片

总结

Django中间件实现方式有两种:函数和类实现。

函数方式实现简单一些;类实现方法多一些,可以实现更复杂的应用场景。

参考文章

Django-自定义中间件_django 自定义中间件_Python454的博客-CSDN博客

你可能感兴趣的:(#,Django高级,django,中间件,python)