Django--middleware 詳解

 

面對的問題:web

  當咱們的一個網站上線後有可能遇到一些惡意的訪問、好比來自對手的web爬蟲;我看過一些lowB的對手,它們IP地址都不換一個的,也不django

  在行爲上作假裝。瀏覽器

 

  一、可行方法一:session

  在每個view中都對IP進行測試、若是IP地址在黑名單中、那麼就給它返回一個空的結果;明顯這不是一個好的方法 1:)每上view中都有、測試

  不方便維護網站

 

  二、可行方法二:spa

  使用django中的middleware功能、對每個request、response對象作統一的處理code

 

middleware原理:csrf

  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、這個明顯是有問題的;

可是沒空了,改天再寫吧。 

 

 

 

 

----

相關文章
相關標籤/搜索