Использование сайтового кэша
Это кэш наивысшего уровня. Он позволяет кэшировать весь сайт.
Для того чтобы использовать сайтовый кэш, необходимо в файл настроек settings.py, добавить классы UpdateCacheMiddleware и FetchFromCacheMiddleware в настроечный параметр MIDDLEWARE, как показано ниже:
MIDDLEWARE = [
'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.middleware.cache.UpdateCacheMiddleware', # new
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware', # new
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
Обратите внимание, что важно поместить каждый класс в нужное место в настройках MIDDLEWARE. Это связано с тем, что промежуточное ПО кэша должно знать, какие заголовки позволяют изменять объем кэша.
Промежуточное программное обеспечение всегда добавляет что-то в заголовок ответа Vary, когда это возможно.
UpdateCacheMiddleware запускается на этапе ответа, где промежуточное ПО запускается в обратном порядке, поэтому элемент в верхней части списка запускается последним на этапе ответа.
Таким образом, вам необходимо убедиться, что UpdateCacheMiddleware появляется перед любым другим промежуточным ПО, которое может добавить что-то в заголовок Vary. Следующие модули промежуточного программного обеспечения делают это:
SessionMiddlewareдобавляетCookie.
GZipMiddlewareдобавляетAccept-Encoding.
LocaleMiddlewareдобавляетAccept-Language.
С другой стороны, FetchFromCacheMiddleware, запускается на этапе запроса, где промежуточное ПО применяется от первого к последнему, поэтому элемент в верхней части списка запускается первым на этапе запроса.
FetchFromCacheMiddleware также необходимо запускать после того, как другое промежуточное ПО обновит заголовок Vary, поэтому FetchFromCacheMiddleware должно быть после любого элемента, который это делает.
Так-же ещё необходимо добавить следующие настройки в файл settings.py:
CACHE_MIDDLEWARE_ALIAS = 'default'
CACHE_MIDDLEWARE_SECONDS = 600
CACHE_MIDDLEWARE_KEY_PREFIX = 'site1'
В приведенных выше настроечных параметрах промежуточного компонента кэша используется предустановленный (или дефолтный) кэш и устанавливается значение тайм-аута глобального кэша, равное 10 минутам.
Кроме того, во избежание коллизий, если один и тот же бэкенд Memcached используется в нескольких проектах, то для всех ключей кэша задается префикс. Теперь сайт будет кэшироваться и возвращать кэшированный контент для всех запросов методом GET. С помощью меню отладочных инструментов Django можно обращаться к различным страницам и проверять запросы к кэшу.
Следует отметить, что сайтовый кэш непригоден для многих сайтов, поскольку он влияет на все представления, даже те, которые вы, возможно, не хотите кэшировать, например управляющие представления, в которых подразумевается, что возвращаемые из базы данных данные будут отражать последние изменения.