Gointerface接口声明实现及作用详解
296
2022-08-31
Django(part42)--限制IP请求次数
学习笔记,仅供参考,有错必纠
限制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',]
向127.0.0.1 已经访问过 0 次!: /testlimit/[24/Jun/2020 01:28:57] "GET /testlimit/ HTTP/1.1" 200 25
再访问2次127.0.0.1 已经访问过 1 次!: /testlimit/[24/Jun/2020 01:30:40] "GET /testlimit/ HTTP/1.1" 200 25IP: 127.0.0.1 已经访问过 2 次!: /testlimit/[24/Jun/2020 01:30:53] "GET /testlimit/ HTTP/1.1" 200 25
当我们第4次向127.0.0.1 已经访问过 3 次!: /testlimit/[24/Jun/2020 01:31:35] "GET /testlimit/ HTTP/1.1" 200 46
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~