如何在 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):
        ...

如何最好地实施白名单和日志记录取决于您的具体要求。