액세스 제어의 주파수

에서 rest_framework.throttling 가져 오기 SimpleRateThrottle 
가져 오기 시간 
VISIT_RECORD = {} 

클래스 MyThrottle ( 객체 ) :
     "" "
     다섯 번에 액세스 할 수 있도록 1 분
     " ""
     는 def __init __ (자동) : 
        self.history = [] 

    DEF allow_request (자체, 요청,보기 ) : 
        # GET 사용자의 IP 주소를 
        IP . = request.META GET ( " REMOTE_ADDR " , "" ) 
        # self.key = self.get_cache_key () 
        . #의 self.cache GET (self.key, [])
        경우 IP는하지 VISIT_RECORD : 
            VISIT_RECORD [IP] = [로 time.time ()]
         다른 : 
            역사 = VISIT_RECORD [IP] 
            self.history = 역사 
            history.insert ( 0 ,로 time.time ()) 
            # 목록이 시간을 허용 할 수 있는지 확인 범위 내 
            그동안 self.history [ 0 ] - self.history [- 1이다. ]> 60 : 
                self.history.pop () 
            #리스트의 길이가 결정되는 
            경우 렌 NOT (self.history) <= . 5 :
                 리턴 거짓
        반환 진정한 

    # 대기 
    # [최근 시간, 가장 오래된 시간] 
    DEF 대기 (자동) : 
        리턴  (60) - (self.history [ 0 ] - self.history [- 1 ])
클래스 DRFThrottle (SimpleRateThrottle) : 
    범위 = " WD " 
    데프 get_cache_key (자기, 요청,보기) : 
        #拿IP地址
        반환 self.get_ident (요청시)

 

추천

출처www.cnblogs.com/bozhengheng/p/12113213.html