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的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
python好玩的项目—色情图片识别代码分享
Nov 07 Python
Python实现将一个正整数分解质因数的方法分析
Dec 14 Python
python实现BackPropagation算法
Dec 14 Python
用十张图详解TensorFlow数据读取机制(附代码)
Feb 06 Python
对Python3使运行暂停的方法详解
Feb 18 Python
基于python实现高速视频传输程序
May 05 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
解决Python对齐文本字符串问题
Aug 28 Python
python加载自定义词典实例
Dec 06 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
Apr 08 Python
Jupyter notebook 远程配置及SSL加密教程
Apr 14 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动态生成虚拟现实VRML网页
2006/10/09 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
javascript 页面只自动刷新一次
2009/07/10 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
jQuery实现鼠标滑过点击事件音效试听
2015/08/31 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
pytorch获取模型某一层参数名及参数值方式
2019/12/30 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
python-docx文件定位读取过程(尝试替换)
2020/02/13 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
如何用python处理excel表格
2020/06/09 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
高中学生期末评语
2014/04/25 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
2014年电教工作总结
2014/12/19 职场文书
自我检讨报告
2015/01/28 职场文书
介绍信样本
2015/01/31 职场文书
自主招生自荐信范文
2015/03/04 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle