中间件是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/应用名称/目录层级。
如下图所示:
函数方式
创建中间件
可通过函数方式来定义中间件。
在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中注册。
请求验证
路由
# 中间件
path('middle_test', views.middle_test, name='middle_test'),
视图
def middle_test(request):
print('这里是视图,参数为', request.GET.get('name'))
保存后运行项目,浏览器访问后控制器查看结果:
类方式
创建中间件
创建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中间件实现方式有两种:函数和类实现。
函数方式实现简单一些;类实现方法多一些,可以实现更复杂的应用场景。
参考文章
Django-自定义中间件_django 自定义中间件_Python454的博客-CSDN博客