Как следить за регулированием API в Django - PullRequest
0 голосов
/ 17 июня 2019

Я создаю решение, в котором у меня есть одно ядро ​​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'

1 Ответ

0 голосов
/ 17 июня 2019

Классы газа, предоставляемые каркасом REST Django, не позволяют вам этого делать.Вам нужно будет создать собственный класс Throttle и перезаписать 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):
        ...

Как лучше всего реализовать белый список и ведение журнала, зависит от ваших точных требований.

...