Кеширует ли Django запрос POST (и его параметры)? - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть DRF API, который реализует представления, которые позволяют GET и POST звонки:

@api_view([
    'GET',
    'POST',
])
@cache_page(timeout=60 * 10)
def my_view(request):
  # do stuff

Я заметил, что:

  1. GETзапросы кэшируются, как и ожидалось.

  2. POST запросы НЕ кэшируются вообще.

Вопросы:

  1. Это предназначено или я что-то не так делаю?

  2. Если это работает как задумано ... как я могу заставить Django также кэшировать POST запросов?

1 Ответ

2 голосов
/ 26 сентября 2019

Из документации класса в исходном коде Django:

Подробнее о том, как работает кэширование: * Кешируются только GET или HEAD-запросы с кодом состояния 200.Ссылка: https://github.com/django/django/blob/master/django/middleware/cache.py

Причина этого ограничения, вероятно, заключается в том, что GET-запросы должны быть идемпотентными, а POST-запросы - нет, поэтому, как правило, нет смысла кэшировать POST-запросы.Вот вопрос, который хорошо объясняет эту концепцию: Что такое идемпотентность в методах HTTP?

Django с открытым исходным кодом, так что вы всегда можете расширить механизм кэширования, чтобы получить такое поведение, но это будетвероятно, запутают ваших пользователей API, поскольку они будут ожидать, что POST всегда будет новым запросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...