rest_framework.throttlingインポートSimpleRateThrottle インポート時間 VISIT_RECORD = {} クラス MyThrottle(オブジェクト): "" " 5回にアクセスできるようにする1分 """ DEF __init __(自己): self.history = [] DEF allow_request(セルフ、リクエスト、ビュー): #取得、ユーザーのIPアドレス 、IP = request.META GET(" REMOTE_ADDR "、"" ) #self.key = self.get_cache_key() #のself.cache。GET (self.key、[]) IF 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() #リストの長さが決定される IF lenのない(self.history)<= 5 : 戻り偽 返す真 #待機 #[最近の時間、最も古い時間] DEF待機(セルフ): リターン 60 - (self.history [ 0 ] - self.history [ - 1 ])
クラスDRFThrottle(SimpleRateThrottle): スコープ = " WD " DEF get_cache_key(自己、リクエスト、ビュー): #拿IP地址 リターン self.get_ident(リクエスト)