0
点赞
收藏
分享

微信扫一扫

Django高级扩展之中间件

耳一文 2023-06-23 阅读 85

目录

方法介绍

__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博客

举报

相关推荐

0 条评论