El libro de Django 1.0

13.2. La cache por sitio

Una vez que hayas especificado CACHE_BACKEND, la manera más simple de usar la cache es colocar en cache el sitio entero. Esto significa que cada página que no tenga parámetros GET o POST será puesta en cache por un cierto período de tiempo la primera vez que sean pedidas.

Para activar la cache por sitio solamente agrega 'django.middleware.cache.CacheMiddleware' a la propiedad MIDDLEWARE_CLASSES, como en el siguiente ejemplo:

MIDDLEWARE_CLASSES = (
    'django.middleware.cache.CacheMiddleware',
    'django.middleware.common.CommonMiddleware',
)

Nota El orden de MIDDLEWARE_CLASSES importa. Mira la sección "Orden de MIDDLEWARE_CLASSES_" más adelante en este capítulo.

Luego, agrega las siguientes propiedades en el archivo de configuración de Django:

  • CACHE_MIDDLEWARE_SECONDS: El tiempo en segundos que cada página será mantenida en la cache.
  • CACHE_MIDDLEWARE_KEY_PREFIX: Si la cache es compartida a través de múltiples sitios usando la misma instalación Django, coloca esta propiedad como el nombre del sitio, u otra cadena que sea única para la instancia de Django, para prevenir colisiones. Usa una cadena vacía si no te interesa.

La cache middleware coloca en cache cada página que no tenga parámetros GET o POST. Esto significa que si un usuario pide una página y pasa parámetros GET en la cadena de consulta, o pasa parámetros POST, la cache middleware no intentará obtener la versión en cache de la página. Si intentas usar la cache por sitio ten esto en mente cuando diseñes tu aplicación; no uses URLs con cadena de consulta, por ejemplo, a menos que sea aceptable que tu aplicación no coloque en cache esas páginas.

Esta cache middleware admite otras característica, CACHE_MIDDLEWARE_ANONYMOUS_ONLY. Si defines esta característica, y la defines como True, la cache middleware sólo colocará en cache pedidos anónimos (p.e.: pedidos hechos por un usuario no logueado). Esta es una manera simple y efectiva de deshabilitar la cache para cualquier página de algún usuario específico, como la interfaz de administración de Django. Ten en cuenta que si usas CACHE_MIDDLEWARE_ANONYMOUS_ONLY, deberás asegurarte que has activado AuthenticationMiddleware y que AuthenticationMiddleware aparezca antes de CacheMiddleware en tus MIDDLEWARE_CLASSES

Finalmente, nota que CacheMiddleware automáticamente coloca unos pocos encabezados en cada HttpResponse:

  • Coloca el encabezado Last-Modified con el valor actual de la fecha y hora cuando una página (aún no en cache) es requerida.
  • Coloca el encabezado Expires con el valor de la fecha y hora más el tiempo definido en CACHE_MIDDLEWARE_SECONDS.
  • Coloca el encabezado Cache-Control para otorgarle una vida máxima a la página, como se especifica en CACHE_MIDDLEWARE_SECONDS.