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、这个明显是有问题的;

但是没空了,改天再写吧。 

 

 

 

 

----

posted on 2018-03-05 09:45  蒋乐兴的技术随笔  阅读(565)  评论(0编辑  收藏  举报

导航