一、定义

  • 中间件是Django请求/响应处理的钩子框架。它是一个轻量级的、低级的"插件"系统,用于全局改变Django的输入或者输出
  • 中间件以类的形式体现
  • 每个中间件组件负责做一些特定的功能。例如:Django包含一个中间件组件AuthenticationMiddleware,它使用会话将用户与请求关联起来

二、中间件规则

中间件类必须继承自django.utils.deprecation.MiddlewareMixin

中间件类须实现下列五个方法中的一个或多个:

  1. process_request(self, request)

    执行路由之前被调用,在每个请求上调用,返回NodeHttpResponse对象

    返回Node说明请求可以继续往下走

    返回HttpResponse说明请求终止

  2. process_view(self, request, callback, callback_args, callback_kwargs)

    调用视图之前被调用,在每个请求上调用,返回NodeHttpResponse对象

  3. process_response(self, request, response)

    所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象

  4. process_exception(self, request, exception)

    当处理过程中抛出异常时调用,返回HttpResponse对象

    统一异常处理

  5. process_template_response(self, request, response)

    在视图函数执行完毕且试图返回的对象中包含render方法时被调用,该方法需要返回实现了render方法的响应对象

【注】中间件中大多数方法在返回None时表示忽略当前操作进入下一项事,当返回HttpResponse对象时表示此请求结束,直接返回给客户端

三、新建中间件

from django.utils.deprecation import MiddlewareMixinclass MyMW(MiddlewareMixin):def process_request(self, request):print("MyMW process_request..")def process_view(self, request, callback, callback_args, callback_kwargs):print("MyMW process_view..")def process_response(self, request, response):print("MyMW process_response..")return response

四、注册中间件

setting.py中需要注册一下自定义的中间件

# file : setting.py
MIDDLEWARE = [···
]

五、使用中间件

查看输出信息

六、中间件顺序

测试多个中间件

两个中间件

注册中间件

查看访问效果

注意:配置为数组,中间件被调用时,以’先上到下’’先下到上’的顺序调用

七、练习1

用中间件实现强制某个IP地址只能向/test开头的地址发送5次请求

提示:

  • request.META['REMOTE_ADDR']可以得到远程客户端的IP地址

  • request.path_info可以得到客户端访问的请求路由信息

7.1. 中间件

class VisitLimit(MiddlewareMixin):visit_times = {}def process_request(self, request):ip_address = request.META['REMOTE_ADDR']path_url = request.path_infoif not re.match('^/test', path_url):return Nonetimes = self.visit_times.get(ip_address, 0)print('ip', ip_address, '已经访问', times, '次')self.visit_times[ip_address] = times + 1if times < 5:return Nonereturn HttpResponse('您已经访问过' + str(times) + '次,访问被禁止')

7.2. 注册

7.3. 测试

八、

18. Django进阶:中间件相关推荐

  1. django进阶05中间件

    原创:django进阶05中间件 django进阶05中间件 什么是中间件 django的中间件(middleware)是一个轻量级的插件系统,在django中的请求和响应中,可以利用中间件干预视图的 ...

  2. Django进阶教程

    Django进阶教程 Queryset特性及高级查询技巧 什么是QuerySet QuerySet是Django提供的强大的数据库接口(API).正是因为通过它,我们可以使用filter, exclu ...

  3. django进阶04部署上线(nginx,uwsgi,supervisor)

    原创博文地址:django进阶04部署上线(nginx,uwsgi,supervisor) django自身服务ok python manage.py runserver,验证可正常访问 uwsgi安 ...

  4. django进阶02websocket

    原创博文地址:django进阶02websocket 本文适合有一定websocket基础的,至少完整看过前后端demo的读者,一窍不通的小白建议先阅读"参考"部分的博文扫扫盲. ...

  5. python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...

    python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...

  6. 18. 面向对象进阶

    18. 面向对象进阶 目标:掌握面向对象进阶相关知识点,能沟通更加自如的使用面向对象来进行编程. 概要: 成员 变量 实例变量 类变量 方法 绑定方法 类方法 静态方法 属性 成员修饰符(公有/私有) ...

  7. 浅谈Django的中间件与Python的装饰器

    浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...

  8. Django的中间件

    Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...

  9. Django 组件- 中间件

    11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...

  10. django进阶07用户模块与权限系统

    原创:django进阶07用户模块与权限系统 Django默认提供了用户权限管理模块auth, 1 2 3 user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_use ...

最新文章

  1. LIVE555中RTSP客户端接收媒体流分析及测试代码
  2. matlab生成ai图片,MATLAB绘图:导出矢量图
  3. 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
  4. 技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化...
  5. hikaricp 连接池分析_数据库连接池终于搞对了,这次直接从100ms优化到3ms!
  6. 【深度学习】——日常知识点总结(持续更新)
  7. 中移M5310A NBIoT模组通信测试命令
  8. java解析带斜杠的参数_Java Spring MVC应用程序仅接受带有斜杠的POST请求
  9. Python常见设计模式
  10. matlab ann-bp分类器,利用matlab真的BP-ANN分类器设计.doc
  11. mysql数据库熟悉表空间数据文件_MySQL数据文件介绍及存放位置
  12. 5G iPhone SE起售价399美元 今年有望出货3000万部
  13. C++ 的 allocator类 提供类型化的内存分配以及对象的分配和撤销
  14. Zen coding
  15. Word 2010:22个经典小技巧大放送
  16. C++独立游戏存档模块设计
  17. 免费的IT类技术书籍大全
  18. 高效实现统计分析(按日,月,周)查询功能
  19. 广东九联UNT402H-3798-mv300-uwe5621wifi-爱家TV新魔百和刷机固件
  20. ORCAL计算司龄是否满一年

热门文章

  1. 12.看板方法---度量和管理报告
  2. 1.企业安全建设指南(金融行业安全架构与技术实践) --- 企业信息安全建设简介
  3. 9.docker commit
  4. 147. class_exists()
  5. 29. Element ownerDocument 属性
  6. linux生成密码文本,Linux下用makepasswd和passwordmaker生成密码
  7. 计算机软件编程英语词汇集锦
  8. MYSQL 中varchar类型转text格式
  9. 关于constexpr
  10. JVM--Garbage First