Django 限制使用者訪問頻率

2021-09-13 10:57:53 字數 2099 閱讀 5872

import time

from django.utils.deprecation import middlewaremixin

max_request_per_second=2 #每秒訪問次數

class requestblockingmiddleware(middlewaremixin):

def process_request(self,request):

now=time.time()

request_queue = request.session.get('request_queue',)

if len(request_queue) < max_request_per_second:

request.session['request_queue']=request_queue

else:

time0=request_queue[0]

if (now-time0)<1:

time.sleep(5)

request.session['request_queue']=request_queue[1:]

middleware = [

'django.middleware.security.securitymiddleware',

'django.contrib.sessions.middleware.sessionmiddleware',

'django.middleware.common.commonmiddleware',

'django.middleware.csrf.csrfviewmiddleware',

'common.middleware.requestblockingmiddleware', #在sessions之後,auth之前

'django.contrib.auth.middleware.authenticationmiddleware',

'django.contrib.messages.middleware.messagemiddleware',

'django.middleware.clickjacking.xframeoptionsmiddleware',

]12345678910

作用:防止爬蟲無節制的爬取資料 減少伺服器的壓力。

drf的自帶功能

官方文件:

一、throttle配置到setting中

'default_throttle_classes': (

'rest_framework.throttling.anonratethrottle',

'rest_framework.throttling.userratethrottle'

),'default_throttle_rates':

限速規則與限速的類。未登入情況下限速,通過ip位址。登入情況下通過session或token來判斷。

the rate descriptions used in default_throttle_rates may include second, minute, hour or day as the throttle period.

二、設定到我們的介面

from rest_framework.throttling import userratethrottle,anonratethrottle

throttle_classes = (userratethrottle, anonratethrottle)

在throttling的原始碼中

parse_rate:進行解析我們的規則

allow_request:中使用django的cache進行快取。將每個ip的訪問次數設定到快取中

get_ident:會通過request.meta.get('remote_addr')取出ip

已登入使用者的限制是通過request.user.pk

Django 限制使用者訪問頻率的中介軟體的實現

一 定義限制訪問頻率的中介軟體 common middleware.py import time from django.utils.deprecation import mwww.cppcns.comiddlewaremixin max request per second 2 每秒訪問次數 cl...

Django限制API訪問頻率的幾種思路

需求描述 平台中需要編寫介面供第三方呼叫,需要控制呼叫頻率,需求為5s內呼叫一次後不得再次呼叫。解決思路 1.django官方外掛程式庫中有個django ratelimit外掛程式可以滿足要求,django ratelimit文件位址,很靈活很強大。只需要在我們的views函式上加上 key ip...

日常 nginx訪問頻率限制

去年的事,隨便記記 2017年3月15日 記錄 nginx限制請求頻率 server外面加上 limit req zone binary remote addr zone one 10m rate 1r s 裡面加上 limit req zone one burst 5 解釋 超過頻率的請求會被放到...