当前位置 : 主页 > 编程语言 > python >

Django(part42)--限制IP请求次数

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考,有错必纠 限制IP请求次数 这个Blog中,我们将使用中间件,实现强制某个IP地址只能向某个地址发送3次GET请求。 在做这个案例之前我们需要先学两个request的属性:

学习笔记,仅供参考,有错必纠


限制IP请求次数



这个Blog中,我们将使用中间件,实现强制某个IP地址只能向某个地址发送3次GET请求。

在做这个案例之前我们需要先学两个request的属性:

  • ​​request.META['REMOTE_ADDR']​​ ,得到远程客户端的IP地址
  • ​​request.path_info​​ ,得到客户端GET请求的路由信息


现在,我们在主urls.py中创建路由:

urlpatterns = [
re_path(r'^admin/', admin.site.urls),
re_path(r'^testlimit/$',views.test_limit),
]

在主视图模块中增加视图函数:

def test_limit(request):
return HttpResponse("我是测试页面... ...")

创建自动以中间键:

class VisitLimit(MiddlewareMixin):
'''此中间件限制一个IP地址对应的访问/testlimit/的次数不能改过3次,超过后禁止使用'''
visit_times = {}
# 此字典用于记录客户端IP地址有访问次数
def process_request(self, request):
ip_address = request.META['REMOTE_ADDR'] # 得到IP地址
if not re.match('^/testlimit/$', request.path_info):
return None
#继续请求
times = self.visit_times.get(ip_address, 0)
print("IP:", ip_address, '已经访问过', times, '次!:', request.path_info)
self.visit_times[ip_address] = times + 1
if times < 3:
return None

return HttpResponse('你已经访问过' + str(times) + '次,禁止再次访问!')

将我们刚创建的中间键进行注册:

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',
'mymiddleware.checklogin.MyMiddleWare',
'mymiddleware.checklogin.VisitLimit',
]

向http://127.0.0.1:8000/testlimit/发起请求:

Django(part42)--限制IP请求次数_python

查看cmd界面:

IP: 127.0.0.1 已经访问过 0 次!: /testlimit/
[24/Jun/2020 01:28:57] "GET /testlimit/ HTTP/1.1" 200 25

再访问2次http://127.0.0.1:8000/testlimit/,并查看cmd界面:

IP: 127.0.0.1 已经访问过 1 次!: /testlimit/
[24/Jun/2020 01:30:40] "GET /testlimit/ HTTP/1.1" 200 25
IP: 127.0.0.1 已经访问过 2 次!: /testlimit/
[24/Jun/2020 01:30:53] "GET /testlimit/ HTTP/1.1" 200 25

当我们第4次向http://127.0.0.1:8000/testlimit/发起请求时,出现如下页面:

Django(part42)--限制IP请求次数_客户端_02

再查看cmd界面:

IP: 127.0.0.1 已经访问过 3 次!: /testlimit/
[24/Jun/2020 01:31:35] "GET /testlimit/ HTTP/1.1" 200 46

【来源:国外高防服务器 http://www.558idc.com/stgf.html 欢迎留下您的宝贵建议】
上一篇:Django(part2)--创建项目与Django目录结构
下一篇:没有了
网友评论