framework —— throttles(訪問頻率控制)
阿新 • • 發佈:2018-02-06
not args nbsp hid response ret djang ews pre
framework —— throttles(訪問頻率控制)
1.目錄結構
2.views.py
from django.shortcuts import render from rest_framework.response import Response from rest_framework.views import APIView # Create your views here. RECORD = { # "1.1.1.1":[150131516161,] } class MyThrottle(object): def allow_request(self, request, view):view.py""" Return `True` if the request should be allowed, `False` otherwise. a.對匿名用戶進行限制:每個用戶1分鐘允許訪問10次 1.獲取用戶ip,在request裏面。 2.拿到之後,對它進行限制 3.怎麽限制? 用一個字典來約束限制 4.如果ip不在字典,就表示新增加的,就加到字典裏,以ip為key,時間戳為value。 5.約束條件:一分鐘以內的保留,一分鐘以外的剔除 6.添加時間戳之前限制。判斷,加約束條件。 7.約束條件做完,需要加個長度的約束,長度限制為10 8.當前時間還需要和最後的時間做個比較,求出等待時間 放回 false 限制 返回 true 通行""" import time ctime = time.time() ip = "1.1.1.1" if ip not in RECORD: #如果不在就表示新添加的ip。 RECORD[ip] = [ctime,] else: #time_list = [4505461651651,3505461651651,2505461651651,1505461651651,] time_list = RECORD[ip] whileTrue: val = time_list[-1] #拿到最後一個值 if (ctime-60) > val: #時間尾端大於最後一個值 time_list.pop() #最後一個給剔除 else: #否則正常運行 break if len(time_list) >10 : return False time_list.insert(0,ctime) #添加時間戳,之前需要做判斷,加約束條件 return True def wait(self): import time ctime = time.time() first_out_time = RECORD[‘1.1.1.1‘][-1] #取到最後一個時間 wt = 60 - (ctime - first_out_time) #60秒- (當前時間-第一個出來時間) return wt class LimitView(APIView): authentication_classes = [] permission_classes = [] throttle_classes = [MyThrottle,] def get(self,request,*args,**kwargs): self.dispatch return Response(‘控制訪問頻率示例‘)
3.urls.py,(只需要添加標紅的)
驗證圖:
framework —— throttles(訪問頻率控制)