Django 中间件按IP地址过滤
示例
第一:路径结构
如果没有,则需要按照以下结构在应用程序中创建中间件文件夹:
yourproject/yourapp/middleware
文件夹中间件应与settings.py,url,模板...放置在同一文件夹中。
重要提示:不要忘记在中间件文件夹中创建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”中添加中间件
我们需要在中寻找内容,然后MIDDLEWARE_CLASSES在其中settings.py添加中间件(将其添加到最后一个位置)。应该是这样的:
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'
)做完了!现在,每个客户端的每个请求都将调用您的自定义中间件并处理您的自定义代码!