Django框架教程之中间件MiddleWare浅析

作者:老王同鞋 时间:2021-07-15 08:19:43 

前言

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

来源:https://www.cnblogs.com/chao666/p/12113206.html

标签:django,中间件,middleware
0
投稿

猜你喜欢

  • 对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解

    2023-06-04 19:17:50
  • Pandas 按索引合并数据集的方法

    2023-06-01 13:35:10
  • Instr函数与InstrRev函数的区别

    2008-07-07 16:53:00
  • 五步让你成为GO 语言高手

    2023-06-16 18:00:41
  • 自动更新程序的设计框架

    2009-08-12 13:00:00
  • Python SDK实现私服上传下载的示例

    2021-11-22 08:14:42
  • Python pyinotify模块实现对文档的实时监控功能方法

    2023-04-15 08:13:52
  • Python正则表达式匹配ip地址实例

    2023-06-13 15:06:12
  • 用Python实现等级划分

    2022-10-11 23:45:21
  • python利用urllib实现爬取京东网站商品图片的爬虫实例

    2022-05-01 12:32:56
  • 七个生态系统核心库[python自学收藏]

    2021-09-17 03:51:12
  • 详解pandas数据合并与重塑(pd.concat篇)

    2023-06-02 00:05:37
  • python基于event实现线程间通信控制

    2022-04-30 07:10:51
  • ThinkPHP 3.2 版本升级了哪些内容

    2023-09-05 04:22:04
  • 提一个懒人需求——找遥控器的电视

    2009-03-23 18:16:00
  • python方向键控制上下左右代码

    2022-01-27 01:44:22
  • Python爬虫之Selenium实现键盘事件

    2022-08-28 03:40:37
  • sqlserver 触发器学习(实现自动编号)

    2012-10-07 10:58:03
  • django admin 自定义替换change页面模板的方法

    2022-01-15 11:19:30
  • 如何利用Tensorflow2进行猫狗分类识别

    2021-06-29 18:58:12
  • asp之家 网络编程 m.aspxhome.com