Могу ли я запретить среднему кэшированию в Django MiddleWare устанавливать для Cache-Control и Expires те же значения, которые использует memcached? - PullRequest
1 голос
/ 09 декабря 2011

Я настраиваю сайт Django для использования memcached через среднюю систему кэширования Django.

Я планировал хранить страницы в memcached очень долгое время (потому что они меняются не очень частои потому, что весь мой сайт должен удобно помещаться в относительно небольшом объеме памяти), и изменить мой код, чтобы удалять страницы из memcached, когда данные на этих страницах изменяются (чтобы избежать устаревших страниц).

Однако MiddleWare Django устанавливает HTTP-заголовки Cache-Control и Expires в своих ответах на те же значения, которые memcached использует для своей политики истечения срока действия.Это означает, что если я установлю очень длинный срок действия для кэшированных страниц в memcached, браузеры конечных пользователей также будут использовать этот срок действия, что сделает их более вероятными для получения устаревших данных.

Могу ли я остановить Middlejare от Django от этого?

Ответы [ 3 ]

4 голосов
/ 09 декабря 2011

Вы можете добавить декоратор

@cache_control(must_revalidate=True, max_age=3600)

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

from django.views.decorators.cache import cache_control

. После этого, если содержимое на сервере изменяется, браузер перезагружает страницу с сервера.

0 голосов
/ 10 июля 2013

Я недавно создал django-response-timeout, чтобы решить эту проблему для всего сайта.Он добавит заголовок max_age ко всем представлениям, а также время истечения.Для установки pip install django-response-timeout.Затем добавьте response_timeout.middleware.SetCacheTimeoutMiddleware к своему промежуточному программному обеспечению следующим образом:

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.UpdateCacheMiddleware',
    'response_timeout.middleware.SetCacheTimeoutMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
)

Наконец, установите RESPONSE_CACHE_SECONDS на столько, сколько вы хотите, чтобы ответы кэшировались.

0 голосов
/ 09 декабря 2011

Django документы имеют целую страницу на кэширование . Разве это не обеспечивает вас необходимой информацией?

В частности:

Существует несколько других способов управления параметрами кэша. Например, HTTP позволяет приложениям делать следующее:

Определите максимальное время кэширования страницы. Укажите, является ли кэш всегда должен проверять наличие новых версий, только кэшированный контент, когда нет изменений. (Некоторые кэши могут доставить кэшированное содержимое, даже если страница сервера изменилась, просто потому, что кеш-копия еще не истекла.)

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