Django框架教程之中间件MiddleWare浅析


Posted in Python onDecember 29, 2019

前言

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
python使用str & repr转换字符串
Oct 13 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python3+dlib实现人脸识别和情绪分析
Apr 21 Python
Python 中的参数传递、返回值、浅拷贝、深拷贝
Jun 25 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
解决python虚拟环境切换无效的问题
Apr 30 Python
使用Python实现微信拍一拍功能的思路代码
Jul 09 Python
Jupyter notebook 输出部分显示不全的解决方案
Apr 24 Python
Python初识逻辑与if语句及用法大全
Aug 07 Python
三个python爬虫项目实例代码
Dec 28 #Python
python scrapy重复执行实现代码详解
Dec 28 #Python
Python统计时间内的并发数代码实例
Dec 28 #Python
如何基于python实现脚本加密
Dec 28 #Python
python使用配置文件过程详解
Dec 28 #Python
python正则表达式匹配IP代码实例
Dec 28 #Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 #Python
You might like
使用apache模块rewrite_module (转)
2007/02/14 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php对关联数组循环遍历的实现方法
2015/03/13 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
php array_map()函数实例用法
2021/03/03 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
根据邮箱的域名跳转到相应的登录页面的代码
2012/02/27 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
Javascript加载速度慢的解决方案
2014/03/11 Javascript
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
javascript实现简单计算器效果【推荐】
2016/04/19 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
微信小程序开发摇一摇功能
2019/11/22 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
微信小程序地图实现展示线路
2020/07/29 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
新手该如何学python怎么学好python?
2008/10/07 Python
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
python3+django2开发一个简单的人员管理系统过程详解
2019/07/23 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
Python测试框架:pytest学习笔记
2020/10/20 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
新西兰领先的鞋类和靴子网上商城:Merchant 1948
2017/09/08 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
销售提升方案
2014/06/07 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
Golang jwt身份认证
2022/04/20 Golang