Триггер неправильного регулирования DRF

#python #django #django-rest-framework

#python #django #django-rest-framework

Вопрос:

У меня есть APIView место, где я установил регулирование для штатных пользователей. Я также добавил имя представления в область видимости. Вот фрагмент кода:

permissions.py

 class IsStaffUser(BasePermission):

    def has_permission(self, request, view):
        return request.user and request.user.is_authenticated and request.user.is_staff

 

views.py

 from rest_framework.views import APIView
from myprj.somewhere.permissions import IsStaffUser
from myprj.somewhere.throttling import MyThrottleRate


class BaseView(APIView):
    permission_classes = (IsStaffUser,)

class MyView(BaseView):
    throttle_classes = (MyThrottleRate,)

    def get(self, request, pk):
        # some stuff
 

throttling.py

 from rest_framework.throttling import UserRateThrottle

class BaseThrottling(UserRateThrottle):
    cache_format = 'throttle_%(scope)s_%(ident)s_(view_name)s'

    def get_rate(self):
        """
        Determine the string representation of the allowed request rate.
        """
        try:
            return self.THROTTLE_RATES[self.scope]
        except KeyError:
            msg = "No default throttle rate set for '%s' scope" % self.scope
            raise ImproperlyConfigured(msg)

    def get_cache_key(self, request, view):
        if request.user.is_authenticated:
            ident = request.user.pk
            view_name = view.request.resolver_match.func.__name__

            cache_format = self.cache_format % {
                'scope': self.scope,
                'ident': ident,
                'view_name': view_name
            }
            return cache_format
        else:
            raise APIException('You are not authorised')

class MyThrottleRate(BaseThrottling):
    THROTTLE_RATES = {
        'user': '20/hour',
    }

 

Я установил тариф равным 20 в час, но я получаю код статуса 429 по первому запросу самого дня. Я искал решение, но не смог найти решение. Пожалуйста, помогите мне найти ошибку.

Примечание: мы используем apache с mod_wsgi