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 相关文章推荐
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python 第三方库的安装及pip的使用详解
May 11 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
python3调用R的示例代码
Feb 23 Python
python 找出list中最大或者最小几个数的索引方法
Oct 30 Python
python 调用钉钉机器人的方法
Feb 20 Python
详解python中的time和datetime的常用方法
Jul 08 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
Python实现大数据收集至excel的思路详解
Jan 03 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
jupyter 添加不同内核的操作
Feb 06 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 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 获取完整url地址
2008/12/20 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
推荐自用 Javascript 缩图函数 (onDOMLoaded)……
2007/10/23 Javascript
JavaScript 实现模态对话框 源代码大全
2009/05/02 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
Bootstrap组件学习之导航、标签、面包屑导航(精品)
2016/05/17 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
echarts学习笔记之箱线图的分析与绘制详解
2017/11/22 Javascript
nodejs express配置自签名https服务器的方法
2018/05/22 NodeJs
微信小程序的部署方法步骤
2018/09/04 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
python调用shell的方法
2013/11/20 Python
python快速查找算法应用实例
2014/09/26 Python
简单介绍Python中的JSON模块
2015/04/08 Python
教大家玩转Python字符串处理的七种技巧
2017/03/31 Python
python 接口测试response返回数据对比的方法
2018/02/11 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
2020/12/27 Python
如何用tempfile库创建python进程中的临时文件
2021/01/28 Python
男女时尚与复古风格在线购物:RoseGal(全球免费送货)
2017/07/19 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
简易离婚协议书范本2014
2014/10/15 职场文书
婚前财产协议书范本
2014/10/19 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2015年超市工作总结范文
2015/05/26 职场文书
工作简历的自我评价
2019/05/16 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python