Django框架之中间件MiddleWare的实现


Posted in Python onDecember 30, 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模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
Python实现的HTTP并发测试完整示例
Apr 23 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
Jun 13 Python
python基本语法练习实例
Sep 19 Python
Pandas 数据处理,数据清洗详解
Jul 10 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
Django框架登录加上验证码校验实现验证功能示例
May 23 Python
python如何读取bin文件并下发串口
Jul 05 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
Django debug为True时,css加载失败的解决方案
Apr 24 Python
python opencv通过按键采集图片源码
May 20 Python
用Python实现屏幕截图详解
Jan 22 Python
Django 路由层URLconf的实现
Dec 30 #Python
python解析多层json操作示例
Dec 30 #Python
pytorch 求网络模型参数实例
Dec 30 #Python
利用python3 的pygame模块实现塔防游戏
Dec 30 #Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 #Python
python多线程使用方法实例详解
Dec 30 #Python
Python动态声明变量赋值代码实例
Dec 30 #Python
You might like
PHP日期时间函数的高级应用技巧
2009/05/16 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
php更新mysql后获取改变行数的方法
2014/12/25 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
一段好玩的JavaScript代码
2006/12/01 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
JavaScript中输出标签的方法
2014/08/27 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
使用AngularJS 应用访问 Android 手机的图片库
2015/03/24 Javascript
js实现类似新浪微博首页内容渐显效果的方法
2015/04/10 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
JavaScript事件学习小结(一)事件流
2016/06/09 Javascript
jQuery实现鼠标滚动图片延迟加载效果附源码下载
2016/06/28 Javascript
node.js路径处理方法以及绝对路径详解
2021/03/04 Javascript
jquery处理checkbox(复选框)是否被选中实例代码
2017/06/12 jQuery
Vue之Watcher源码解析(2)
2017/07/19 Javascript
python读写二进制文件的方法
2015/05/09 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
Python 多线程Threading初学教程
2017/08/22 Python
详解PyTorch批训练及优化器比较
2018/04/28 Python
分享一下Python数据分析常用的8款工具
2018/04/29 Python
pygame实现简易飞机大战
2018/09/11 Python
10个Python小技巧你值得拥有
2018/09/29 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
2020/06/04 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
python输入中文的实例方法
2020/09/14 Python
简单说说tomcat的配置
2013/05/28 面试题
基层党员干部四风问题整改方向和措施
2014/09/25 职场文书
学校食堂标语
2014/10/06 职场文书
教育见习报告范文
2014/11/03 职场文书
2014年幼儿园后勤工作总结
2014/11/10 职场文书
交通安全月活动总结
2015/05/08 职场文书
2015年党小组工作总结
2015/05/26 职场文书
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python