Almacenamiento en caché en todo el sitio con Django: problemas con las páginas protegidas por contraseña al cerrar la sesión

StackOverflow https://stackoverflow.com/questions/1608521

  •  05-07-2019
  •  | 
  •  

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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top