Решение 1 : с упаковкой @override_default()
Вы хотите применить функцию-оболочку к viewset
, которую хотите переопределить этим значением:
from rest_framework.throttling import UserRateThrottle
class UserViewSet(viewsets.ViewSet):
@api_view(['PUT'])
@throttle_classes([UserRateThrottle])
@override_settings(REST_FRAMEWORK['DEFAULT_THROTTLE_RATES']['user'] = "2/day")
def update(self, request, pk=None):
...
Добавьте оболочку перед любым представлением или набором изображений, к которому вы хотите применить эту переопределенную таможенную стоимость.
Вы также хотите это в своем settings.py
:
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.AnonRateThrottle',
'rest_framework.throttling.UserRateThrottle'
),
'DEFAULT_THROTTLE_RATES': {
'anon': '100/day',
'user': '13500/day'
}
}
Решение 2 : пользовательский класс регулирования
Однако, если вы хотите использовать разные скорости регулирования для тестовой среды, попробуйте следующее в settings.py
:
TEST = True ## <-- Set to False when not in testing!!
REST_FRAMEWORK = {
'DEFAULT_THROTTLE_CLASSES': (
'rest_framework.throttling.CustomUserRateThrottle'
)
}
И назначьте свой собственный класс регулирования:
from django.conf import settings
class CustomUserRateThrottle(throttling.UserRateThrottle):
if settings.TEST:
THROTTLE_RATES = 'DEFAULT_THROTTLE_RATES': {
'user': '13500/day',
}
else:
THROTTLE_RATES = 'DEFAULT_THROTTLE_RATES': {
'user': '2/day',
}
return settings.TEST # <-- Custom throttling classes must always return either True or False, so this makes sense.
Решение 3 : прямо в вашей "тестовой оболочке":
Включите вашу пользовательскую оболочку, как мы определили выше, но на этот раз в ваш метод test_something()
в test.py
:
from django.conf import settings
from django.test import TestCase
class TestCase(TestCase):
def test_something(self):
with self.settings(REST_FRAMEWORK = ['DEFAULT_THROTTLE_RATES']['user'] = '13500/day'):
# START TESTING HERE WITH TEST SETTINGS