Almacenamiento en caché en todo el sitio con Django: problemas con las páginas protegidas por contraseña al cerrar la sesión
Pregunta
Recientemente he implementado el almacenamiento en caché en todo el sitio usando memcached en mi aplicación Django, he configura TTL en aproximadamente 500 segundos, e implementa cachés por vista en otras partes de la aplicación web .
El problema que tengo es que cuando un usuario cierra la sesión, porque es una forma de publicación, el sitio se comporta como se espera, sin embargo, si luego van a una parte del sitio protegida por contraseña, la aplicación se comporta como si todavía estuvieran conectados. , a menos que presionen " actualizar " ;. Soy nuevo en el almacenamiento en caché y me pregunto si puedo hacer algo inteligente para evitar esto.
Solución
Me encontré con problemas similares. La forma estándar de Django es deshabilitar el caché para los usuarios autenticados.
#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
Funciona bien si diferentes usuarios ven páginas diferentes (ejemplo: su nombre de usuario) y no puede tener una versión para ellos.
Pero si solo hay 2 versiones de la página: para usuarios autenticados y para otros, no es bueno deshabilitar completamente el caché para usuarios autenticados. Escribí una aplicación que, además de todo, hace posible la multa sintonizar caché en este caso.
Actualizar.
Por cierto: mencionó que al hacer clic en 'actualizar' se recibe la versión correcta de la página. Significa que el problema es la memoria caché del lado del cliente (Vence el encabezado o la etiqueta electrónica), no la memoria caché del servidor.
Para evitar el almacenamiento en caché del lado del cliente (debe hacerlo si tiene varias versiones de la página bajo la misma URL) use @cache_control (must_revalidate = True)
decorator.
Otros consejos
En la vista de una parte del sitio protegida con contraseña, ¿comprueba si el usuario está registrado o es anónimo antes de obtener los datos (y tal vez traer datos de la caché)?
Deberías. Django lo ayuda, con un decorador requerido para ingresar puede colocar en la vista. Mira esto: http://docs.djangoproject.com/en / dev / topics / auth / # the-login-required-decorator