您好,登錄后才能下訂單哦!
Django中怎么限制IP訪問頻率,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
REST_FRAMEWORK 配置
對(duì)使用 rest_framework 框架的項(xiàng)目來說,可以使用框架的設(shè)置來對(duì)api的訪問頻率進(jìn)行限制
REST_FRAMEWORK = { 'DEFAULT_PARSER_CLASSES': ( 'rest_framework.parsers.JSONParser', 'rest_framework.parsers.FormParser', 'rest_framework.parsers.MultiPartParser', ), 'DEFAULT_AUTHENTICATION_CLASSES': ( # 'lecare.core.rest_auth.CrossSiteSessionAuthentication', ), 'DEFAULT_PERMISSION_CLASSES': [ # 'rest_framework.permissions.IsAuthenticated', 'rest_framework.permissions.AllowAny', ], 'PAGE_SIZE': 20, 'UNICODE_JSON': False, # 'COERCE_DECIMAL_TO_STRING': False, # 'EXCEPTION_HANDLER': 'lecare.core.custom_exception_handler.custom_exception_handler', 'JWT_EXPIRATION_DELTA': datetime.timedelta(hours = 2), 'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days = 360), 'JWT_ALLOW_REFRESH': False, 'JWT_AUTH_HEADER_PREFIX': 'JWT', 'JWT_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_payload_handler', 'JWT_RESPONSE_PAYLOAD_HANDLER': 'consumer.jwt_conf.jwt_response_payload_handler', 'JWT_GET_USER_SECRET_KEY': 'consumer.jwt_conf.jwt_get_secret_key', # 'DEFAULT_THROTTLE_CLASSES': ( # # 開啟匿名用戶接口請(qǐng)求頻率限制 # 'rest_framework.throttling.AnonRateThrottle', # # 開啟授權(quán)用戶接口請(qǐng)求頻率限制 # 'rest_framework.throttling.UserRateThrottle' # ), # 'DEFAULT_THROTTLE_RATES': { # # 頻率限制有second, minute, hour, day # # 匿名用戶請(qǐng)求頻率 # 'anon': '30/second', # # 授權(quán)用戶請(qǐng)求頻率 # 'user': '30/second' # } }
使用middleware中間件來限制IP頻率
import time from django.utils.deprecation import MiddlewareMixin MAX_REQUEST_PER_SECOND=2 #每秒訪問次數(shù) 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_queue.append(now) request.session['request_queue']=request_queue else: time0=request_queue[0] if (now-time0)<1: time.sleep(5) request_queue.append(time.time()) request.session['request_queue']=request_queue[1:] #啟用RequestBlocking中間件 IDDLEWARE = [ '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', ]
關(guān)于Django中怎么限制IP訪問頻率問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。