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、这个明显是有问题的;
但是没空了,改天再写吧。
----