91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Django如何限制API訪問頻率

發布時間:2020-10-28 21:06:15 來源:億速云 閱讀:185 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關Django如何限制API訪問頻率,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

解決思路

1.Django官方插件庫中有個django-ratelimit插件可以滿足要求, django-ratelimit文檔地址,很靈活很強大。只需要在我們的views函數上加上

@ratelimit(key='ip', rate='1/30s', block=True)
裝飾器就可以了,網站上的資料不多,大部分都是英文的。在這里稍微解釋下參數:

key='ip', 必填項,標識按照IP劃分,我理解的是同一IP,遵循后面參數設定的規則。

rate='1/30s',必填項,設置的頻率值,這個意思是30秒內執行一次,也可以按照 “分”,“時”,“日” 等劃分,很靈活的配置,比如每分鐘執行5次,可以這樣寫rate='5/m',這里參考文檔足夠弄明白

block=True,在這里吃了個虧,默認是False,加上了裝飾器沒寫該參數,訪問不受限制,沒有達到間隔時間內不能再訪問的預期效果,果斷回去翻文檔,

谷歌翻譯:False是否阻止請求而不是注釋。

我理解大概的意思是,當訪問進來的時候是否去阻止它,把block=True之后,在次測試訪問,可以看到403,確實是阻止了。

還有其它的參數,有更多需求的話可以看看,這是其一。

2.通過session存儲訪問時間

這里其實有兩種方式,第一是寫在中間件中,第二是裝飾器,每個人需求不一樣,我這一大堆函數就幾個需要給外部調用的,干脆就做了裝飾器,先貼碼:

def limit(seconds = 5):
'''
@func: 限制訪問頻率裝飾器
'''
def rate_limit(func):
def func_limit(request):
now=time.time()
request_time = request.session.get('request_time',0)
interval_time = int(now - request_time)
if interval_time < seconds:
ret = ret_content(20008,'%s 秒后可再次訪問'%(seconds-interval_time))
return JsonResponse(ret)
else:
request.session['request_time'] = time.time()
ret = func(request)
return ret
return func_limit
return rate_limit
def ret_content(ret_code,message):
return {'ret_code':ret_code,'message':message}

大概思路是:將當前訪問的時間存session,設置時間間隔,當在時間間隔之內的時候,不讓其刷新,并返回json,超過時間間隔,更新session,讓其執行。使用如下:

@limit(seconds=30)

30s內執行一次,我這個乞丐版的沒第一種方法靈活了,不過在禁止期間返回的結果值會比較友好,不是403。程序處理會比較方便,另外針對IP的情況,我這里沒做處理,需要的話自己可以改改,把request_time換成IP + Salt方式就可以了。

外部IP地址獲取代碼這里也貼出來:

def get_remote_cli_ip(request):
'''
@func:獲取客戶端ip
'''
ip = request.META.get('HTTP_X_FORWARDED_FOR',0)
if ip == 0:
return request.META['REMOTE_ADDR']
else:
return ip

以上就是Django如何限制API訪問頻率,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

杭锦后旗| 宁德市| 新源县| 思南县| 鄂托克前旗| 安泽县| 曲阳县| 昌黎县| 搜索| 大厂| 合作市| 定日县| 南岸区| 马鞍山市| 凤城市| 古浪县| 剑川县| 永州市| 木兰县| 简阳市| 长兴县| 三原县| 海伦市| 合江县| 齐齐哈尔市| 景谷| 东乌珠穆沁旗| 班玛县| 永安市| 新郑市| 平原县| 儋州市| 宜兰县| 外汇| 香河县| 安徽省| 济宁市| 翁源县| 红原县| 汝城县| 锦州市|