面對的問題: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、這個明顯是有問題的;
可是沒空了,改天再寫吧。
----