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 解釋 超過頻率的請求會被放到...