1. 程式人生 > >DRF 框架總結 - 限流 Throttling

DRF 框架總結 - 限流 Throttling

限流Throttling

可以對介面訪問的頻次進行限制,以減輕伺服器壓力。


使用

可以在配置檔案中,使用DEFAULT_THROTTLE_CLASSESDEFAULT_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, hourday來指明週期。

也可以在具體檢視中通過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' } }