kir*_*ril 7 django-rest-framework
django_Rest_framework 的文档指出:
如果您想同时施加突发节流率和持续节流率,也可以使用多个节流。例如,您可能希望将用户限制为每分钟最多 60 个请求,每天最多 1000 个请求。
但是,没有解释如何实现类似的情况。
我试过这样的事情,但没有用
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': ['30/minute', '1000/day']
}
}
Run Code Online (Sandbox Code Playgroud)
Dui*_*lio 13
这是可能的,但必须定义多个限制,每个时间单位一个。
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user_min': '30/minute',
'user_day': '1000/day',
}
}
Run Code Online (Sandbox Code Playgroud)
UserRateThrottle您定义的范围的子类:from rest_framework.throttling import UserRateThrottle
class UserMinThrottle(UserRateThrottle):
scope = 'user_min'
Run Code Online (Sandbox Code Playgroud)
class YourAPIView(APIView):
throttle_classes = [
UserMinThrottle,
UserDayThrottle
]
Run Code Online (Sandbox Code Playgroud)
您无法获得 的费率列表UserRateThrottle。
根据文档,您必须配置范围以允许多种速率。
在你的情况下,它将是:
class BurstRateThrottle(UserRateThrottle):
scope = 'burst'
class SustainedRateThrottle(UserRateThrottle):
scope = 'sustained'
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'example.throttles.BurstRateThrottle',
'example.throttles.SustainedRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'burst': '60/min',
'sustained': '1000/day'
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3056 次 |
| 最近记录: |