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生成文件md5校验值函数的方法
Jan 10 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
Python之dict(或对象)与json之间的互相转化实例
Jun 05 Python
Python爬虫爬取新浪微博内容示例【基于代理IP】
Aug 03 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
Dec 05 Python
Django网络框架之HelloDjango项目创建教程
Jun 06 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
Python中base64与xml取值结合问题
Dec 22 Python
Python实现名片管理系统
Feb 14 Python
Python数据正态性检验实现过程
Apr 18 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 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/11/25 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
JS+PHP实现用户输入数字后显示最大的值及所在位置
2017/06/19 PHP
一个js拖拽的效果类和dom-drag.js浅析
2010/07/17 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
jquery下jstree简单应用 - v1.0
2011/04/14 Javascript
firefox下jQuery UI Autocomplete 1.8.*中文输入修正方法
2012/09/19 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
jQuery 表单序列化实例代码
2017/06/11 jQuery
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
jQuery层叠选择器用法实例分析
2019/06/28 jQuery
async/await让异步操作同步执行的方法详解
2019/11/01 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
vue+animation实现翻页动画
2020/06/29 Javascript
python中requests小技巧
2017/05/10 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
Django中密码的加密、验密、解密操作
2019/12/19 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
使用BeautifulSoup4解析XML的方法小结
2020/12/07 Python
详解css3中 text-fill-color属性
2019/07/08 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
先进个人获奖感言
2014/01/24 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
寒假家长评语大全
2014/04/16 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
2014年保管员工作总结
2014/11/18 职场文书
廉洁自律证明
2015/06/24 职场文书
感恩教育主题班会
2015/08/12 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
Java中的随机数Random
2022/03/17 Java/Android
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记