Django REST framework 限流
阿新 • • 發佈:2018-11-09
限流Throttling
可以對介面訪問的頻次進行限制,以減輕伺服器壓力。
使用
可以在配置檔案中,使用DEFAULT_THROTTLE_CLASSES 和 DEFAULT_THROTTLE_RATES進行全域性配置,
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES' : {
'anon': '100/day',
'user': '1000/day'
}
}
DEFAULT_THROTTLE_RATES 可以使用 second, minute, hour 或day來指明週期。
也可以在具體檢視中通過throttle_classess屬性來配置,如
from rest_framework.throttling import UserRateThrottle
from rest_framework.views import APIView
class ExampleView(APIView):
throttle_classes = (UserRateThrottle,)
...
可選限流類
1) AnonRateThrottle
限制所有匿名未認證使用者,使用IP區分使用者。
使用DEFAULT_THROTTLE_RATES[‘anon’] 來設定頻次
2)UserRateThrottle
限制認證使用者,使用User id 來區分。
使用DEFAULT_THROTTLE_RATES[‘user’] 來設定頻次
3)ScopedRateThrottle
限制使用者對於每個檢視的訪問頻次,使用ip或user id。
例如:
class ContactListView(APIView) :
throttle_scope = 'contacts'
...
class ContactDetailView(APIView):
throttle_scope = 'contacts'
...
class UploadView(APIView):
throttle_scope = 'uploads'
...
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.ScopedRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'contacts': '1000/day',
'uploads': '20/day'
}
}
# 例項
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.generics import RetrieveAPIView
from rest_framework.throttling import UserRateThrottle
class BookDetailView(RetrieveAPIView):
queryset = BookInfo.objects.all()
serializer_class = BookInfoSerializer
authentication_classes = [SessionAuthentication]
permission_classes = [IsAuthenticated]
throttle_classes = (UserRateThrottle,)