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

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

    ----

  • 相关阅读:
    Sublime Text 2 && MinGW G++ On Windows
    [zz]linux IO(function open read write close)
    PHP的基本常识(1)
    helloworld.c 的一次系统旅行(1) 读书笔记
    PHP 仿博客园 个人博客(1)
    配置 .htaccess 单点入口
    仿博客园个人博客(3)基本完成
    PHP的基本常识(2)
    JQuery 获得所有表单值
    PHP 仿博客园 个人博客(2)
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8507386.html
Copyright © 2011-2022 走看看