1.如果禁止某个IP访问某个视图函数,在视图函数中加判断
# EXCLUDE_IPS=['127.0.0.1']
@blocked_ips
def test_middelware(request):
# userIp = request.META['REMOTE_ADDR']
# print(userIp)
# #禁止某些IP访问
# if userIp in EXCLUDE_IPS:
# return HttpResponse("<h1>Forbidden</h1>")
return render(request,'booktest/test_middleware.html')
2.test_middleware.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试中间件</title>
</head>
<body>
<h1>测试中间件</h1>
</body>
</html>
3.url
url(r'^test_middleware$', views.test_middelware),
4.如果有多个函数都要这个限制,也可以使用装饰器,然后像上面那样给每一个要限制的视图添加装饰器
def blocked_ips(view_func):
def wrapper(request,*view_args,**view_kwargs):
userIp = request.META['REMOTE_ADDR']
print(userIp)
#禁止某些IP访问
if userIp in EXCLUDE_IPS:
return HttpResponse("<h1>Forbidden</h1>")
else:
return view_func(request,*view_args,**view_kwargs)
return wrapper
5.接下来使用中间件,在app目录下面新建middleware.py
from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin
# 中间件类
class BlockedIPSMiddleware(MiddlewareMixin):
EXCLUDE_IPS = ['127.0.0.1']
# 中间件函数
def process_view(self, request, view_func, *view_args, **view_kwargs):
'''视图函数调用之前调用这个'''
userIp = request.META['REMOTE_ADDR']
print(userIp)
# 禁止某些IP访问
if userIp in BlockedIPSMiddleware.EXCLUDE_IPS:
return HttpResponse("<h1>Forbidden</h1>")
6.在项目的setting.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',
'booktest.middleware.BlockedIPSMiddleware',#注册中间件类
]
7.注释掉所有的装饰器,再次访问,发现都会出现forbidden