赞
踩
中间件是Django请求/响应处理的钩子框架。它是一个轻量级的、低级的“插件”系统,用于全局改变Django的输入或输出。每个中间件组件负责实现一些特定的功能。例如,Django包含一个中间件组件AuthenticationMiddleware,它使用会话将用户与请求关联起来。
目录
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)
不需要传参数,服务器响应第一个请求的时候自动调用,用于确定是否启用该中间件。
在执行视图之前被调用(分配url匹配视图之前),每个请求都会调用,返回None或者HttpResponse对象。
调用视图之前执行,每个请求都会调用,返回None或者HttpResponse对象。
在视图刚好执行完后调用,每个请求都会调用,返回None或者HttpResponse对象。
使用render时。
所有相应返回浏览器之前调用,每个请求都会调用,返回None或者HttpResponse对象。
当视图抛出异常时调用,返回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中间件实现方式有两种:函数和类实现。
函数方式实现简单一些;类实现方法多一些,可以实现更复杂的应用场景。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。