zoukankan      html  css  js  c++  java
  • 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、这个明显是有问题的;

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

    ----

  • 相关阅读:
    洛谷—— P3353 在你窗外闪耀的星星
    洛谷—— P1238 走迷宫
    洛谷—— P1262 间谍网络
    9.8——模拟赛
    洛谷—— P1189 SEARCH
    算法
    May 22nd 2017 Week 21st Monday
    May 21st 2017 Week 21st Sunday
    May 20th 2017 Week 20th Saturday
    May 19th 2017 Week 20th Friday
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8507386.html
Copyright © 2011-2022 走看看