如何在 Django 中监控 API 节流
How to monitor API throttling in Django
我正在构建一个解决方案,其中我有一个核心 API,我已根据官方文档 https://www.django-rest-framework.org/api-guide/throttling/
在其上实施了节流。但我想知道我将如何 monitor the requests so that no genuine user of the app gets blocked and if so should be able to unblock it.
我的settings.py文件
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.ScopedRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'students': '1/minute',
}
}
还有我的views.py
class StudentViewSet(viewsets.ModelViewSet):
throttle_scope = 'students'
Django REST 框架提供的限制 classes 不允许您这样做。您将必须创建一个自定义限制 class 并覆盖 allow_request()
以记录限制事件并提供一些用于白名单的工具。例如。像这样:
class WhitelistScopedRateThrottle(throttling.ScopedRateThrottle):
def allow_request(self, request, view):
allowed = super().allow_request(request, view)
if not allowed:
if self.is_whitelisted(request, view)
return True
else:
self.log_throttling(request, view)
return False
else:
return True
def is_whitelisted(self, request, view):
...
def log_throttling(self, request, view):
...
如何最好地实施白名单和日志记录取决于您的具体要求。
我正在构建一个解决方案,其中我有一个核心 API,我已根据官方文档 https://www.django-rest-framework.org/api-guide/throttling/
在其上实施了节流。但我想知道我将如何 monitor the requests so that no genuine user of the app gets blocked and if so should be able to unblock it.
我的settings.py文件
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.ScopedRateThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'students': '1/minute',
}
}
还有我的views.py
class StudentViewSet(viewsets.ModelViewSet):
throttle_scope = 'students'
Django REST 框架提供的限制 classes 不允许您这样做。您将必须创建一个自定义限制 class 并覆盖 allow_request()
以记录限制事件并提供一些用于白名单的工具。例如。像这样:
class WhitelistScopedRateThrottle(throttling.ScopedRateThrottle):
def allow_request(self, request, view):
allowed = super().allow_request(request, view)
if not allowed:
if self.is_whitelisted(request, view)
return True
else:
self.log_throttling(request, view)
return False
else:
return True
def is_whitelisted(self, request, view):
...
def log_throttling(self, request, view):
...
如何最好地实施白名单和日志记录取决于您的具体要求。