前言

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. Xamarin.Android提示aapt退出,代码为255
  2. c语言获取时间并存储,如何在C程序中获取日期和时间值?
  3. linux驱动中使用定时器
  4. Basic--Java基本语法
  5. 学习搭建谷粒商城微服务框架(Docker配置)-01
  6. 戴尔电脑重装win10系统
  7. 【转】你真的理解Python中MRO算法吗?
  8. 电脑局域网所有IP及对应MAC地址查询
  9. 【opencv-python】视频处理(5) cv2.VideoCapture.grab()函数、cv2.VideoCapture.retrieve()函数
  10. 为什么大部分企业面试官都会问GMV,GMV是什么?
  11. 领域驱动设计 -- 领域驱动建模与面向对象建模的差异(一)
  12. C语言基础题-水仙花数
  13. [总结] better fog
  14. 特征函数篇2——与概率密度的函数
  15. JDK 16 即将发布!网友:新特性挺酸爽a...
  16. 浅谈冷启动问题 (推荐系统相关)
  17. 梳理 React 知识笔记 从入门到放弃 !框架必知的知识点
  18. k8s - 常用命令
  19. 程序数据集散地:数据库(3)
  20. 程序员编程艺术:第三章、寻找最小的k个数

热门文章

  1. Linux搭建ElasticSearch(ES)集群并设置密码登录
  2. 如何快速高效地进行seo域名批量查询
  3. 振憾 ajax与yahoo map加上美国各大赛事的widget
  4. 爱情的诗·16~20节
  5. 关于wangeditor取消自动获取焦点
  6. 阿里下放自动驾驶,汽车业务是个坑,或是时候探讨下一个乐视了
  7. java json转换xml格式_在Java中将JSON对象转换为XML格式?
  8. 惠普服务器DPS-460EB电源维修,DPS-460EB A 04F 499249-001 460W DL380G6 HP服务器电源
  9. 【值传递和引用传递之外的第三种传值方式 - 传名参数】
  10. GC (Allocation Failure) 那些事