RTFM :) Официальные документы Django: Кэширование и наборы запросов
Каждый набор QuerySet содержит кэш для минимизации доступа к базе данных.(...)
и:
Во вновь созданном QuerySet кеш пуст.При первой оценке QuerySet - и, следовательно, при выполнении запроса к базе данных - Django сохраняет результаты запроса в кеше QuerySet и возвращает результаты, которые были явно запрошены (например, следующий элемент, если QuerySet итерируетсянад).Последующие оценки QuerySet повторно используют кэшированные результаты.
Кэширование выполняется автоматически в случае QuerySets (результаты запросов).
EDIT: Что касается вашегоКод вставлен в вопрос.Если ключ еще не существует в кеше, вы должны создать его с помощью метода add()
, но помните, что он истекает по умолчанию через 30 секунд.Если вы хотите, чтобы он сохранялся дольше, вы должны добавить опцию тайм-аута к методу add()/set()
.
Если вы хотите кэшировать весь ваш сайт (т.е. декораторам, как вы их использовали), вам нужно добавитьсоответствующее промежуточное программное обеспечение для вашего MIDDLEWARE_CLASSES
в settings.py (в этом точном порядке, поскольку порядок промежуточного программного обеспечения имеет значение, оно загружается по одному, как вы их определяете):
MIDDLEWARE_CLASSES = (
# ...
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
# ...
)
Если у вас их неттогда вы будете получать ошибочные заголовки каждый раз, когда будете использовать возможности кэширования для сайта.