Не работают пользовательские классы дросселирования Django Rest Framework
У меня проблемы с настройкой custom throttling
с использованием django-restframework
для django
.
Я создал следующий класс views.py
, который содержит представление с этим пользовательским дросселем:
from .custom_throttles import *
@api_view(('GET',))
@throttle_classes([LowLevelThrottle])
def home_stats(request):
token = request.data['token']
if token == os.environ['api_token']:
content = {
'users' : len(Profile.objects.all()),
'posts' : len(Post.objects.all()),
'reactions' : len(PostReaction.objects.all())
}
return Response(json.dumps(content), status=status.HTTP_200_OK)
else:
content = {
'error' : 'invalid token'
}
return Response(json.dumps(content), status=status.HTTP_401_UNAUTHORIZED)
Этот пользовательский дроссель импортирован из custom_throttles.py
, который выглядит следующим образом:
from rest_framework import throttling
class LowLevelThrottle(throttling.AnonRateThrottle):
scope = 'll'
def allow_request(self, request, view):
if request.method == "GET":
return True
return super().allow_request(request, view)
И последнее, но не менее важное: вот как у меня настроены некоторые параметры в моем settings.py
файле настройки:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': [
'rest_framework.throttling.AnonRateThrottle',
'django_project.custom_throttles.LowLevelThrottle'
],
'DEFAULT_THROTTLE_RATES': {
'll': '1/second',
}
}
У меня также есть следующие журналы, которые я могу предоставить, ясно показывающие, как несколько запросов были сделаны в течение этого 1-секундного временного интервала.
[24/Aug/2022 07:43:14] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:23] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:23] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:23] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:24] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:24] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:24] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:24] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:24] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:25] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:25] "GET /homestats HTTP/1.1" 200 51
[24/Aug/2022 07:43:25] "GET /homestats HTTP/1.1" 200 51
Если у вас есть вопросы, не стесняйтесь их задавать!
По совету пользователя https://stackoverflow.com/users/16494437/truegopnik я удалил
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': '127.0.0.1:11211',
}
}
из файла settings.py
.