#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