我在我的網站有幾種形式,我有幾個頁面與激烈的數據庫活動。我想爲每個用戶的請求設置一個上限。例如,我不希望人們在不到10秒的時間內完成超過10個請求。如何限制每個用戶每分鐘的請求數?
有沒有辦法在Django做到這一點?
我在我的網站有幾種形式,我有幾個頁面與激烈的數據庫活動。我想爲每個用戶的請求設置一個上限。例如,我不希望人們在不到10秒的時間內完成超過10個請求。如何限制每個用戶每分鐘的請求數?
有沒有辦法在Django做到這一點?
您可以使用自定義中間件來做到這一點。你需要將數據保存在某個地方(db?)。請參閱文檔以瞭解如何編寫您的own middleware。以下是您在request object中可以獲得的內容。
雖然,我建議在apache/nginx /無論你使用什麼。
看看Simon Willison的ratelimitcache。就像名稱所暗示的那樣,它使用Django的緩存框架來存儲限速器的狀態。還有一個blog post,詳細介紹了速率限制器的工作原理。
我知道這是舊的,但是,這是否支持服務器自動縮放?像這樣堅持到所有的服務器實例? – rrw 2016-03-01 07:32:42
@richmondwang取決於您的緩存後端是否在所有機器之間共享。如果您在每臺計算機上使用本地memcache,則速率限制將爲每臺計算機,但如果使用共享redis羣集作爲高速緩存,則速率限制也將被共享。 但是,我強烈推薦使用更新和更新的解決方案,例如https://django-ratelimit.readthedocs.org/en/latest/ – 2016-03-01 20:23:15
特別是對於你的情況,如果你想限制POSTs並且不能使用Apache/nginx規則來實現,請試試這個:http://djangosnippets.org/snippets/2017/ – 2010-06-06 08:44:22