elasticsearch入門系列">elasticsearch入門系列
666
2022-05-30
一、限流
限流類似于權限,因為它確定是否應對請求進行授權。限制指示臨時狀態,用于控制客戶端可以向 API 發出的請求速率。
與權限一樣,可以使用多個限制。您的 API 可能對未經身份驗證的請求設置了限制性限制,對經過身份驗證的請求的限制性限制較少。
您可能希望使用多個限制的另一種情況是,由于某些服務特別占用資源,因此您需要對 API 的不同部分施加不同的約束。
如果要同時施加突發節流速率和持續節流速率,也可以使用多個節流閥。例如,您可能希望將用戶限制為每分鐘最多 60 個請求,每天最多 1000 個請求。
限制不一定僅指速率限制請求。例如,存儲服務可能還需要限制帶寬,而付費數據服務可能希望限制正在訪問的一定數量的記錄。
REST 框架提供的應用程序級限制不應被視為安全措施或針對暴力破解或拒絕服務攻擊的保護。故意的惡意行為者將始終能夠欺騙 IP 源,應用程序級限制旨在實現策略,例如不同的業務層和防止服務過度使用的基本保護。
1.全局設置
REST_FRAMEWORK = { 'DEFAULT_THROTTLE_CLASSES': [ 'rest_framework.throttling.AnonRateThrottle', 'rest_framework.throttling.UserRateThrottle' ], 'DEFAULT_THROTTLE_RATES': { 'anon': '100/day', 'user': '1000/day' } }
2.視圖設置
from rest_framework.response import Response from rest_framework.throttling import UserRateThrottle from rest_framework.views import APIView class ExampleView(APIView): throttle_classes = [UserRateThrottle] def get(self, request, format=None): content = { 'status': 'request was permitted' } return Response(content)
3.裝飾器設置
@api_view(['GET']) @throttle_classes([UserRateThrottle]) def example_view(request, format=None): content = { 'status': 'request was permitted' } return Response(content)
4.裝飾器創建的路由設置限制類
@action(detail=True, methods=["post"], throttle_classes=[UserRateThrottle]) def example_adhoc_method(request, pk=None): content = { 'status': 'request was permitted' } return Response(content)
二、限流緩存
REST框架提供的限制類使用Django的緩存后端。您應確保已設置適當的緩存設置。后端的默認值應該適用于簡單的設置。請參閱 Django 的緩存文檔以獲取更多詳細信息。LocMemCache
如果需要使用 除 以外的高速緩存,可以通過創建自定義限制類并設置屬性來執行此操作。例如:
from django.core.cache import caches class CustomAnonRateThrottle(AnonRateThrottle): cache = caches['alternate']
API
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。