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条件和循环的使用方法
Nov 01 Python
跟老齐学Python之玩转字符串(2)
Sep 14 Python
python 读写、创建 文件的方法(必看)
Sep 12 Python
Python学习小技巧之列表项的排序
May 20 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
Sep 02 Python
详解Python传入参数的几种方法
May 16 Python
python requests使用socks5的例子
Jul 25 Python
Python如何批量获取文件夹的大小并保存
Mar 31 Python
python 制作python包,封装成可用模块教程
Jul 13 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
Sep 28 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
分享7个 Python 实战项目练习
Mar 03 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向socket服务器收发数据的方法
2015/01/24 PHP
php解析url并得到url中的参数及获取url参数的四种方式
2015/10/26 PHP
DOM和XMLHttpRequest对象的属性和方法整理
2012/01/04 Javascript
分享精心挑选的23款美轮美奂的jQuery 图片特效插件
2012/08/14 Javascript
jQuery点击后一组图片左右滑动的实现代码
2012/08/16 Javascript
Javascript操作cookie的函数代码
2012/10/03 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
jQuery学习之prop和attr的区别示例介绍
2013/11/15 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
jQuery入门介绍之基础知识
2015/01/13 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
JavaScript中闭包的详解
2017/04/01 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
微信小程序时间控件picker view使用详解
2018/12/28 Javascript
为vue项目自动设置请求状态的配置方法
2019/06/09 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
vue中h5端打开app(判断是安卓还是苹果)
2021/02/26 Vue.js
python 以16进制打印输出的方法
2018/07/09 Python
Python 等分切分数据及规则命名的实例代码
2019/08/16 Python
jupyter notebook 多行输出实例
2020/04/09 Python
Python使用Numpy模块读取文件并绘制图片
2020/05/13 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
python对execl 处理操作代码
2020/06/22 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
毕业自我鉴定
2013/11/05 职场文书
满月酒主持词
2014/03/27 职场文书
3分钟演讲稿
2014/04/30 职场文书
房产转让协议书(2014版)
2014/09/30 职场文书
2014年实习期工作总结
2014/11/27 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
单位提档介绍信
2015/10/22 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
MySQL系列之十二 备份与恢复
2021/07/02 MySQL