前言

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 middleware_Django框架教程之中间件MiddleWare浅析相关推荐

  1. python middleware_Django框架之中间件MiddleWare的实现

    Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. 中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django框架的 ...

  2. python flask框架教程_Flask框架从入门到实战

    Flask简介: Flask是一个使用 Python 编写的轻量级 Web 应用框架,基于 WerkzeugWSGI工具箱和 Jinja2模板引擎.使用 BSD 授权. Flask也被称为 " ...

  3. python爬虫框架教程_Python爬虫实战(十二):爬虫框架Scrapy的第一个爬虫示例入门教程...

    本文主要向大家介绍了Python爬虫实战的爬虫框架Scrapy的第一个爬虫示例入门教程,通过具体的内容向大家展现,希望对大家学习Python爬虫实战有所帮助. 我们使用dmoz.org这个网站来作为小 ...

  4. 框架下载_25. Scrapy 框架-下载中间件Middleware

    1. Spider 下载中间件(Middleware) Spider 中间件(Middleware) 下载器中间件是介入到 Scrapy 的 spider 处理机制的钩子框架,您可以添加代码来处理发送 ...

  5. python Flask框架如何请求及返回数据——flask详细教程

    python Flask框架如何请求及返回数据--flask详细教程 文章目录: 1 Flask介绍 1.1 Flask简单介绍 1.2 Flask相关资料信息 2 Flask快速入门 2.1 Fla ...

  6. python框架 mysql数据库_在Python的框架中为MySQL实现restful接口的教程

    最近在做游戏服务分层的时候,一直想把mysql的访问独立成一个单独的服务DBGate,原因如下: 请求收拢到DBGate,可以使DBGate变为无状态的,方便横向扩展 当请求量或者存储量变大时,mys ...

  7. python bottle框架 运维_python bottle框架(WEB开发、运维开发)教程 | linux系统运维...

    教程目录 一:python基础 二:bottle基础 python bottle 框架基础教程:环境部署 三:WEB开发教程 四:运维开发教程 运维开发(1.1):框架.结构介绍 运维开发(1.2): ...

  8. Python学习教程:Python自动化测试框架需要学习哪些?

    需要掌握学习Python自动化测试框架有哪些?常用的Python自动化测试框架有Robot Framework.Pytest.UnitTest/PyUnit.Behave.Lettuce.软件测试的自 ...

  9. python数据挖掘系列教程——PySpider框架应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python数据挖掘系列教程--PySpider框架应用全解. PySpider介绍 pyspider上手更简单,操作更加简便,因为它增加了 ...

最新文章

  1. Bootstrap:关于bootstrap单页面中多Modal的问题
  2. 群晖 root_群晖多人协作开发
  3. java公共excel导入_Java实现Excel的导入功能
  4. boost::geometry::detail::copy_segments的用法测试程序
  5. numpy 和tensorflow中argmax(),argmin()函数使用讲解
  6. nodejs MVC
  7. 玻尔兹曼分布涨落_科学网—高分子统计物理漫谈-涨落耗散定理-2 - 苗兵的博文...
  8. 查看总耗时_讲真,我为什么劝你别总加班。
  9. 专利申请“技术交底书”的要素和撰写要求
  10. “非常晚餐”第一期 “3D虚拟世界”是“黑客帝国”吗?
  11. 美国计算机游戏设计大学排名,USNews美国大学游戏设计专业排名
  12. 计算机微信接收excel打不开怎么回事,微信打不开收到的Excel
  13. 微信小程序连接蓝牙汉印HM-A300L标签打印机
  14. 常用论文检查语法错误软件和网址
  15. Ruby语言的优点和缺点
  16. BGP多线和双线双IP服务器有什么区别? 哪个网站访问速度更快?
  17. JPEG2000编解码 ,JEPG与JEPG2000对比及部分名词及解释
  18. 格雷码算法c语言实验报告,算法设计与分析实验报告
  19. WebApp开发中的rem.js
  20. 微机原理知识点总结9(8255A+8251A)

热门文章

  1. 【C语言刷题】牛客网编程入门130精选题目(二)
  2. 最新发布!北京市机器人产业创新发展行动方案(2019-2022) “5432”推动北京机器人产业高质量发展...
  3. lisp 天正源码_Lisp源码200例
  4. 虚拟现实即将冲击的6个行业
  5. 巴黎不同时期城市和城市规划的特点
  6. Vue.js 手机端H5,时间选择器实现:年月日时分秒、年月日时分、年月日时、年月日、年月、年、月、日、时、分、秒,时分秒、时分多种类型
  7. android fragment界面刷新,Fragment的刷新
  8. dota2 虚空假面出装
  9. 技术转让合同的主要条款是什么
  10. Leetcode 1054 距离相等的条形码 (C++题解)