中间件按 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'
)

完成! 现在,每个客户的每个请求都会调用你的自定义中间件并处理你的自定义代码!