Я использую платформу django rest для моделирования представлений API. У меня есть класс API ModelViewSet, который имеет два метода действия: list() и retrieve().
Пример метода получения():
@method_decorator(never_cache)
def retrieve(self, request, *args, **kwargs):
# /en/api/v1/pair/<parameter> calls this method
...
return Response(some_data)
Пример метода list():
@method_decorator(cache_page(settings.PAIR_CACHE_LIFETIME))
def list(self, request, *args, **kwargs):
# /en/api/v1/pair/, /en/api/v1/pair/?name=<parameter> calls this method
# /en/api/v1/pair/ and /en/api/v1/pair/?name=all - response SHOULD be cached
# /en/api/v1/pair/?name=random and /en/api/v1/pair/?name=CORRECT_PAIR_NAME - SHOULD NOT be cached
...
return Response(some_data)
Когда запрос GET отправляется на /en/api/v1/pair, он вызывает метод списка, который декорирован для кэширования ответа. Когда GET-запрос отправляется на /en/api/v1/pair/, он вызывает метод получения, оформленный как never_cache.
Я добавляю функцию возврата случайной пары, когда запрос GET отправляется в /en/api/v1/pair/?name=random. Но поскольку он вызывает метод списка, результат кэшируется на некоторое время и какое-то время возвращает один и тот же ответ.
Как НЕ кэшировать ответ в методе list(), когда вызывается конечная точка /en/api/v1/pair/?name=random, но это должно кешировать все, что еще вызывается в методе списка.
Благодарю вас!