Django框架之中间件MiddleWare的实现
作者:老王同鞋 时间:2021-03-25 15:08:30
Django中的中间件是一个轻量级、底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出。
中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的健壮性。
我们可以使用中间件,在Django处理视图的不同阶段对输入或输出进行干预。
中间件的原理其实就是定义了一个装饰器,但是这个装饰器可以对整个项目中的所有方法进行装饰;
我们可以通过中间件,对请求对象和响应对象进行相应的干预操作。
实现中间件的流程:
1.在子应用中编写一个middleware.py的文件
def my_middleware(get_response):
print('中间件初始化')
def middlewraer(request, *args, **kwargs):
print('在执行执行前对请求进行干预')
# 加入干预代码, 主要应用白名单黑名单
if request.META['USER'] == 'KG':
return HttpResponse('该用户无法访问')
ret = get_response(request, *args,**kwargs)
print('在执行后对响应进行干预')
return ret
return middlewrae
2. 在setting文件中注册中间件
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',
# 注册中间件
'users.middleware.my_middleware',
]
注意:Django运行在调试模式下,中间件init部分有可能被调用两次。
多个中间件执行流程:
1. 中间件会将setting文件中的MIDDLEWARE列表进行逆序,所以初始化的顺序时从下向上的;
2. 在调用时,即编写顺序上第一个中间件装饰的是编写顺序上的第二个中间件,而编写顺序上的第二个中间件装饰的才是视图函数;
3. 在调用结束返回时,会先将视图函数的结果返回给编写顺序上的第二个中间件,然后再返回给编写顺序上的第一个中间件。
代码解读:
@decorator1
@decorator2
def index(View):
pass
来源:https://www.cnblogs.com/chao666/p/12113206.html
标签:Django,中间件,MiddleWare
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python爬虫用request库处理cookie的实例讲解
2023-07-26 03:57:53
GO语言入门学习之基本数据类型字符串
2023-07-16 08:26:31
SQL Server 总结复习(一)
2012-10-07 11:04:02
openstack中的rpc远程调用的方法
2022-09-23 03:45:17
![](https://img.aspxhome.com/file/2023/3/97493_0s.png)
分享十个Python超级好用提高工作效率的自动化脚本
2021-06-26 17:17:16
Go语言字符串基础示例详解
2023-07-17 03:14:56
![](https://img.aspxhome.com/file/2023/9/90489_0s.png)
Python爬虫中urllib库的进阶学习
2023-12-13 19:31:53
![](https://img.aspxhome.com/file/2023/1/72711_0s.png)
python学习之列表的运用
2023-08-02 03:11:30
Python学习入门之区块链详解
2021-07-15 18:21:55
![](https://img.aspxhome.com/file/2023/4/92204_0s.png)
利用Python正则表达式过滤敏感词的方法
2023-05-07 05:05:18
![](https://img.aspxhome.com/file/2023/0/95310_0s.jpg)
javascript闭包的秘密
2008-09-28 20:39:00
pyhon如何把程序打包为whl
2023-06-16 11:30:48
![](https://img.aspxhome.com/file/2023/6/60976_0s.png)
Python实现栈和队列的简单操作方法示例
2023-09-28 19:07:51
![](https://img.aspxhome.com/file/2023/0/111870_0s.png)
Python中使用MELIAE分析程序内存占用实例
2021-10-26 22:34:24
Python实现朴素贝叶斯的学习与分类过程解析
2023-08-17 15:15:23
![](https://img.aspxhome.com/file/2023/2/67742_0s.jpg)
python简单区块链模拟详解
2023-11-09 12:04:57
![](https://img.aspxhome.com/file/2023/0/92200_0s.png)
Django多层嵌套ManyToMany字段ORM操作详解
2023-07-01 02:26:28
python对配置文件.ini进行增删改查操作的方法示例
2023-10-25 05:56:13
Python标准库之sqlite3使用实例
2023-08-12 18:44:05
![](https://img.aspxhome.com/file/2023/2/81562_0s.png)
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
2022-06-09 20:07:37
![](https://img.aspxhome.com/file/2023/9/109659_0s.jpg)