Я использую django rest framework для моделирования представлений API.У меня есть класс API ModelViewSet, который имеет два метода действия: list () и retrieve ()
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 вызывается конечная точка, но она должна кэшировать все остальное, что вызывается в методе списка.
Спасибо!