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

 更新时间:2019年12月29日 08:58:38   作者:老王同鞋  
这篇文章主要给大家介绍了关于Django框架教程之中间件MiddleWare的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Django框架具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

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采集C站热榜数据实战示例

    Python采集C站热榜数据实战示例

    这篇文章主要为大家介绍了Python采集C站热榜数据实战示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 基于pytorch padding=SAME的解决方式

    基于pytorch padding=SAME的解决方式

    今天小编就为大家分享一篇基于pytorch padding=SAME的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 解决Python图形界面中设置尺寸的问题

    解决Python图形界面中设置尺寸的问题

    这篇文章主要介绍了解决Python图形界面中设置尺寸的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python读取mat文件,并转为csv文件的实例

    Python读取mat文件,并转为csv文件的实例

    今天小编就为大家分享一篇Python读取mat文件,并转为csv文件的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python使用xlrd模块读取xlsx文件中的ip方法

    python使用xlrd模块读取xlsx文件中的ip方法

    今天小编就为大家分享一篇python使用xlrd模块读取xlsx文件中的ip方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python实现读取excel表格详解方法

    python实现读取excel表格详解方法

    python操作excel主要用到xlrd和xlwt两个库,xlrd读取表格数据,支持xlsx和xls格式的excel表格;xlwt写入excel表格数据
    2022-07-07
  • 基于python的docx模块处理word和WPS的docx格式文件方式

    基于python的docx模块处理word和WPS的docx格式文件方式

    今天小编就为大家分享一篇基于python的docx模块处理word和WPS的docx格式文件方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python可视化分析的实现(matplotlib、seaborn、ggplot2)

    python可视化分析的实现(matplotlib、seaborn、ggplot2)

    这篇文章主要介绍了python可视化分析的实现(matplotlib、seaborn、ggplot2),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 在anaconda中配置graphviz包的详细过程

    在anaconda中配置graphviz包的详细过程

    graphviz是贝尔实验室开发的一个开源的工具包,它使用一个特定的DSL(领域特定语言):dot作为脚本语言,然后使用布局引擎来解析此脚本,并完成自动布局,这篇文章主要介绍了如何在anaconda中配置graphviz包,需要的朋友可以参考下
    2023-02-02
  • TensorFlow dataset.shuffle、batch、repeat的使用详解

    TensorFlow dataset.shuffle、batch、repeat的使用详解

    今天小编就为大家分享一篇TensorFlow dataset.shuffle、batch、repeat的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01

最新评论