中介軟體按 IP 地址過濾

第一:路徑結構

如果你沒有它,則需要在結構中按照結構建立中介軟體資料夾:

yourproject/yourapp/middleware

資料夾中介軟體應與 settings.py,urls,templates 放在同一個資料夾中…

重要提示:不要忘記在中介軟體資料夾中建立 init .py 空檔案,以便你的應用識別此資料夾

你可以將函式放在單個檔案 yourproject/yourapp/middleware.py 中,而不是使用包含中介軟體類的單獨資料夾

第二:建立中介軟體

現在我們應該為自定義中介軟體建立一個檔案。在這個例子中,假設我們想要一個基於 IP 地址過濾使用者的中介軟體,我們建立了一個名為 filter_ip_middleware.py 的檔案 :

#yourproject/yourapp/middleware/filter_ip_middleware.py
from django.core.exceptions import PermissionDenied    

class FilterIPMiddleware(object):
    # Check if client IP address is allowed
    def process_request(self, request):
        allowed_ips = ['192.168.1.1', '123.123.123.123', etc...] # Authorized ip's
        ip = request.META.get('REMOTE_ADDR') # Get client IP address
        if ip not in allowed_ips:
            raise PermissionDenied # If user is not allowed raise Error

       # If IP address is allowed we don't do anything
       return None

第三:在’settings.py’中新增中介軟體

我們需要在 settings.py 中查詢 MIDDLEWARE_CLASSES,然後我們需要新增我們的中介軟體( 在最後位置新增它 )。應該是這樣的:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
     # Above are Django standard middlewares

     # Now we add here our custom middleware
     'yourapp.middleware.filter_ip_middleware.FilterIPMiddleware'
)

完成! 現在,每個客戶的每個請求都會呼叫你的自定義中介軟體並處理你的自定義程式碼!