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中删除文件的程序代码
Mar 13 Python
使用python实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Linux中Python 环境软件包安装步骤
Mar 31 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
Apr 20 Python
python协程之动态添加任务的方法
Feb 19 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
python中用logging实现日志滚动和过期日志删除功能
Aug 20 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
Python运算符+与+=的方法实例
Feb 18 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
PHP脚本数据库功能详解(中)
2006/10/09 PHP
PHP时间戳与日期之间转换的实例介绍
2013/04/19 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
jquery 字符串切割函数substring的用法说明
2014/02/11 Javascript
实例讲解JavaScript中instanceof运算符的用法
2016/06/08 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤
2017/08/07 Javascript
node puppeteer(headless chrome)实现网站登录
2018/05/09 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
在Vue中获取自定义属性方法:data-id的实例
2020/09/09 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python实现数据图表
2017/07/29 Python
Django rest framework实现分页的示例
2018/05/24 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
Python字典对象实现原理详解
2019/07/01 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
Python通过Schema实现数据验证方式
2020/11/12 Python
HTML5 canvas基本绘图之文字渲染
2016/06/27 HTML / CSS
英国定做窗帘和纺织品面料一站式商店:Dekoria
2018/08/29 全球购物
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
《会走路的树》教后反思
2014/04/19 职场文书
2014年房产经纪人工作总结
2014/12/08 职场文书
大学生旷课检讨书1000字
2015/02/19 职场文书
主持人开场白台词
2015/05/29 职场文书
民事纠纷协议书
2016/03/23 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL
Python学习之包与模块详解
2022/03/19 Python
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server