Django только кэширует страницы без параметров GET или POST? - PullRequest
3 голосов
/ 21 апреля 2011

Я читал django docs в http://docs.djangoproject.com/en/dev/topics/cache/?from=olddocs и прочитал следующую строку:

промежуточное программное обеспечение кэша кэширует каждую страницу без параметров GET или POST.

Означает ли это, что он не будет кэшировать страницы с параметрами GET или POST?Если это правда, то это выглядит довольно глупо, потому что хорошая часть сайта имеет некоторые параметры GET или POST.Нумерация страниц, например, чрезвычайно распространена.Кто-нибудь может уточнить это?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 21 апреля 2011

Обычно, если ваше приложение разработано правильно, нет смысла кэшировать страницы с помощью GET или POST.

Страницы, использующие данные POST

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

Страницы, которые используют GET

Что касается параметров GET, они предназначены для использования для поисковых страниц, например:

example.com/search?query=i%20might%20be%20never%20repeated%20again

Нет особого смысла кешировать подобные страницы - они могут отображаться только один раз за всю жизнь.

Неправильный путь

Однако у вас возникнут проблемы, если вы используете GET неправильным образом:

example.com/viewprofile?userid=65

Параметры для представлений должны передаваться как часть URL:

example.com/viewprofile/65
0 голосов
/ 01 февраля 2019

В Django 1.10 полный URL-адрес используется для ключей кэша. Если мы посмотрим на django.utils.cache.py, то получим get_cache_key, который в свою очередь вызывает _generate_cache_header_key. Это займет md5 для абсолютного URL, как показано с активным языком.

def _generate_cache_header_key(key_prefix, request):
"""Returns a cache key for the header cache."""
url = hashlib.md5(force_bytes(iri_to_uri(request.build_absolute_uri())))
cache_key = 'views.decorators.cache.cache_header.%s.%s' % (
    key_prefix, url.hexdigest())
return _i18n_cache_key_suffix(request, cache_key)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...