Django--middleware 详解
面对的问题:
当我们的一个网站上线后有可能遇到一些恶意的访问、比如来自对手的web爬虫;我看过一些lowB的对手,它们IP地址都不换一个的,也不
在行为上做伪装。
1、可行方法一:
在每一个view中都对IP进行测试、如果IP地址在黑名单中、那么就给它返回一个空的结果;明显这不是一个好的方法 1:)每上view中都有、
不方便维护
2、可行方法二:
使用django中的middleware功能、对每一个request、response对象做统一的处理
middleware原理:
middleware在逻辑上就相当于view的防火墙、所有的request都要经过middleware才能到达view、
view中的所有response都要经过middleware才能到达用户端、大概的流程如下:
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
|---->|-- request --> | middle 层统一处理 | -- request --> | view 处理特定的逻辑|
浏览器 | | middle 层统一处理 | | view 处理特定的逻辑|
|<----|<-- response --- | middle 层统一处理 | <-- response --- | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
| | middle 层统一处理 | | view 处理特定的逻辑|
例子:
定义一个middleware用于演示middleware的用法
第一步:在项目中增加一人叫middlewares.py的文件用于保存middleware的定义

from django.http import HttpResponse class MdMiddleWare(object):
def __init__(self,get_response):
"""
"""
self.get_response = get_response def __call__(self,request):
"""
"""
return HttpResponse("你的IP 被屏蔽了")
定义一个叫MdMiddleWare的中间件、它会拦截所有的请求直接返回"你的IP被屏蔽了"
第二步:激活MdMiddleWare中间件
要激活中间件只要在项目的settings.py中进行设置就行了

设置的代码如下:
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',
'md.middlewares.MdMiddleWare',
]
第三步:测试访问
由于我在middleware中IP都没有测试一下、就直接返回“你的IP 被屏蔽了” 所以再也没有人可以访问到我的view、这个明显是有问题的;
但是没空了,改天再写吧。
----
Django--middleware 详解的更多相关文章
- Django -- settings 详解
Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目录下,开发情况下不需要,我们通常会在当前文件夹运 ...
- Django -- settings 详解(转)
Django -- settings 详解 Django settings详解 1.基础 DJANGO_SETTING_MODULE环境变量:让settings模块被包含到python可以找到的目 ...
- Django 2.0 学习(20):Django 中间件详解
Django 中间件详解 Django中间件 在Django中,中间件(middleware)其实就是一个类,在请求到来和结束后,Django会根据自己的规则在合适的时机执行中间件中相应的方法. 1. ...
- Django中间件详解
Django中间件详解 中间件位置 WSGI 主要负责的就是负责和浏览器和应用之家沟通的桥梁 浏览器发送过来一个http请求,WSGI负责解包,并封装成能够给APP使用的environ,当app数据返 ...
- Middleware详解
Middleware详解 在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置).本章 ...
- Django路由详解
一.路由基础 1.路由url函数:路由自上而下进行匹配:url(正则路径,视图函数内存地址,默认参数,路由别名) 2.路由正则: 规定开始:^ | 规定结束:$ #url(r'index', view ...
- 很详细的Django入门详解
Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站!采用了MVC的框架模式,即模型M,视图V和控制器C,也可以称为MVT模式,模型M,视图V,模板T.在学 ...
- Django框架详解之url
Django基本命令 下载Django pip3 install django 创建一个django project django-admin.py startproject cms 当前目录下会生成 ...
- django 常用 详解
Django 1 django框架介绍 是一个开源框架,2005年发布,采用Python语言编写的,早期时主要做新闻和内容管理的网站 Django本身提供了非常强大的后台管理系统 看中文说明文档 百度 ...
- Django session 详解-part II-session
Django中的session是一个高级工具,它可以让用户存储个人信息以便在下次访问网站中使用这些信息.session的基础还是cookie,但是它提供了一些更加高级的功能.请看下面的一个例子: 使用 ...
随机推荐
- SQL Server查看被锁的表 - dead lock
select str(request_session_id ,4 ,0) as SPID ,convert(varchar(20) ,db_name(resource_database_id)) as ...
- WireShark开启IP, TCP,UDP校验和的办法
首先点击编辑->首选项
- Java实战_手把手编写记事本
Java运用SWT插件编写桌面记事本应用程序 可实现windows系统桌面记事本基本功能.傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 须要工具:Eclipse(带SWT插件) ...
- 让span对宽度有响应而且兼容多种浏览器
span {display:-moz-inline-box; display:inline-block; width:20px;height:20px;}
- CENTOS7更换YUM源为163源
访问地址为:http://mirrors.163.com/.help/centos.html 首先备份源: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum. ...
- .NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Ruby/Shell/Agile/CSS/HTML/HTTP/Unix/Linux大量PDF书籍/电子书籍下载, Effective Java 下载
223本电子书籍,囊括了.NET/ASP.NET/C#/WCF/SQL Server/My SQL/Java/JSP/JDBC/Spring/Spring MVC/PHP/Python/Shell/A ...
- PLSQL创建DBLINK
Oracle创建dblink,多用于数据的同步机制.不建议直接用dblink对数据库频繁的操作... 00.查看创建dblink权限 select * from user_sys_privs t wh ...
- MySQL与OLAP:分析型SQL查询最佳实践探索
搞点多维分析,糙快猛的解决方式就是使用ROLAP(关系型OLAP)了.数据经维度建模后存储在MySQL,ROLAP引擎(比方开源的Mondrian)负责将OLAP请求转化为SQL语句提交给数据库.OL ...
- 通过Intent传递对象
BluetoothDevice device = data.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); 在蓝牙开发中,通过intent(data ...
- Java中用HttpsURLConnection访问Https链接
在web应用交互过程中,有很多场景需要保证通信数据的安全:在前面也有好多篇文章介绍了在Web Service调用过程中用WS-Security来保证接口交互过程的安全性,值得注意的是,该种方式基于的传 ...