18. Django进阶:中间件
一、定义
- 中间件是Django请求/响应处理的钩子框架。它是一个轻量级的、低级的"插件"系统,用于全局改变Django的输入或者输出
- 中间件以类的形式体现
- 每个中间件组件负责做一些特定的功能。例如:Django包含一个中间件组件
AuthenticationMiddleware
,它使用会话将用户与请求关联起来
二、中间件规则
中间件类必须继承自django.utils.deprecation.MiddlewareMixin
类
中间件类须实现下列五个方法中的一个或多个:
process_request(self, request)
执行路由之前被调用,在每个请求上调用,返回Node或HttpResponse对象
返回Node说明请求可以继续往下走
返回HttpResponse说明请求终止
process_view(self, request, callback, callback_args, callback_kwargs)
调用视图之前被调用,在每个请求上调用,返回Node或HttpResponse对象
process_response(self, request, response)
所有响应返回浏览器被调用,在每个请求上调用,返回HttpResponse对象
process_exception(self, request, exception)
当处理过程中抛出异常时调用,返回HttpResponse对象
统一异常处理
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进阶:中间件相关推荐
- django进阶05中间件
原创:django进阶05中间件 django进阶05中间件 什么是中间件 django的中间件(middleware)是一个轻量级的插件系统,在django中的请求和响应中,可以利用中间件干预视图的 ...
- Django进阶教程
Django进阶教程 Queryset特性及高级查询技巧 什么是QuerySet QuerySet是Django提供的强大的数据库接口(API).正是因为通过它,我们可以使用filter, exclu ...
- django进阶04部署上线(nginx,uwsgi,supervisor)
原创博文地址:django进阶04部署上线(nginx,uwsgi,supervisor) django自身服务ok python manage.py runserver,验证可正常访问 uwsgi安 ...
- django进阶02websocket
原创博文地址:django进阶02websocket 本文适合有一定websocket基础的,至少完整看过前后端demo的读者,一窍不通的小白建议先阅读"参考"部分的博文扫扫盲. ...
- python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页)...
python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...
- 18. 面向对象进阶
18. 面向对象进阶 目标:掌握面向对象进阶相关知识点,能沟通更加自如的使用面向对象来进行编程. 概要: 成员 变量 实例变量 类变量 方法 绑定方法 类方法 静态方法 属性 成员修饰符(公有/私有) ...
- 浅谈Django的中间件与Python的装饰器
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
- Django的中间件
Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...
- Django 组件- 中间件
11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...
- django进阶07用户模块与权限系统
原创:django进阶07用户模块与权限系统 Django默认提供了用户权限管理模块auth, 1 2 3 user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_use ...
最新文章
- LIVE555中RTSP客户端接收媒体流分析及测试代码
- matlab生成ai图片,MATLAB绘图:导出矢量图
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- 技巧: 用 JAXM 发送和接收 SOAP 消息—Java API 使许多手工生成和发送消息方面必需的步骤自动化...
- hikaricp 连接池分析_数据库连接池终于搞对了,这次直接从100ms优化到3ms!
- 【深度学习】——日常知识点总结(持续更新)
- 中移M5310A NBIoT模组通信测试命令
- java解析带斜杠的参数_Java Spring MVC应用程序仅接受带有斜杠的POST请求
- Python常见设计模式
- matlab ann-bp分类器,利用matlab真的BP-ANN分类器设计.doc
- mysql数据库熟悉表空间数据文件_MySQL数据文件介绍及存放位置
- 5G iPhone SE起售价399美元 今年有望出货3000万部
- C++ 的 allocator类 提供类型化的内存分配以及对象的分配和撤销
- Zen coding
- Word 2010:22个经典小技巧大放送
- C++独立游戏存档模块设计
- 免费的IT类技术书籍大全
- 高效实现统计分析(按日,月,周)查询功能
- 广东九联UNT402H-3798-mv300-uwe5621wifi-爱家TV新魔百和刷机固件
- ORCAL计算司龄是否满一年
热门文章
- 12.看板方法---度量和管理报告
- 1.企业安全建设指南(金融行业安全架构与技术实践) --- 企业信息安全建设简介
- 9.docker commit
- 147. class_exists()
- 29. Element ownerDocument 属性
- linux生成密码文本,Linux下用makepasswd和passwordmaker生成密码
- 计算机软件编程英语词汇集锦
- MYSQL 中varchar类型转text格式
- 关于constexpr
- JVM--Garbage First
原创:django进阶05中间件 django进阶05中间件 什么是中间件 django的中间件(middleware)是一个轻量级的插件系统,在django中的请求和响应中,可以利用中间件干预视图的 ...
Django进阶教程 Queryset特性及高级查询技巧 什么是QuerySet QuerySet是Django提供的强大的数据库接口(API).正是因为通过它,我们可以使用filter, exclu ...
原创博文地址:django进阶04部署上线(nginx,uwsgi,supervisor) django自身服务ok python manage.py runserver,验证可正常访问 uwsgi安 ...
原创博文地址:django进阶02websocket 本文适合有一定websocket基础的,至少完整看过前后端demo的读者,一窍不通的小白建议先阅读"参考"部分的博文扫扫盲. ...
python 全栈开发,Day87(ajax登录示例,CSRF跨站请求伪造,Django的中间件,自定义分页) 一.ajax登录示例 新建项目login_ajax 修改urls.py,增加路径 fro ...
18. 面向对象进阶 目标:掌握面向对象进阶相关知识点,能沟通更加自如的使用面向对象来进行编程. 概要: 成员 变量 实例变量 类变量 方法 绑定方法 类方法 静态方法 属性 成员修饰符(公有/私有) ...
浅谈Django的中间件 与Python的装饰器 一.原理 1.装饰器是Python的一种语法应用,利用闭包的原理去更改一个函数的功能,即让一个函数执行之前先到另外一个函数中执行其他需求语句,在执行该 ...
Django的中间件 目录 中间件介绍 什么是中间件? 自定义中间件 自定义一个中间件示例 process_request process_response process_view process_ ...
11.1 中间件 一.中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨 ...
原创:django进阶07用户模块与权限系统 Django默认提供了用户权限管理模块auth, 1 2 3 user表,User是auth模块中维护用户信息的表,在数据库中该表被命名为auth_use ...