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

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

    ----

  • 相关阅读:
    caffe的python接口学习(5):生成deploy文件
    Flutter -------- 新手 WanAndroid 项目练习
    android -------- GifView 显示gif图片
    android -------- java.net.UnknownServiceException
    Flutter ------- WebView加载网页
    Flutter -------- 解析JSON数据
    Flutter -------- Http库 网络请求封装(HttpController)
    android ------ 实现高德定位并获取相应信息 ( 最新版高德SDK 和 Android SDK版本)
    Flutter -------- dio网络请求
    Flutter -------- Http库实现网络请求
  • 原文地址:https://www.cnblogs.com/JiangLe/p/8507386.html
Copyright © 2011-2022 走看看