Entonces tengo este sitio (Django 1.8) que tiene una plantilla maestra donde se muestra el nombre del usuario que inició sesión, por lo que la plantilla contiene
{% if user.is_active %} {% trans 'Welcome,' %}{% filter force_escape %}{% firstof user.first_name user.username %}{% endfilter %} {% endif %}Tenga en cuenta que solo se muestra cuando el usuario está activo. Ahora configuro el almacenamiento en caché donde uso redis como almacenamiento de caché:
CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://redis:6379/1', 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', }, "KEY_PREFIX": "mycache", } }El almacenamiento en caché funciona correctamente, pero noto que también ese nombre de usuario se almacena en caché en la interfaz. Esto significa que cuando el usuario cierra la sesión, su nombre aún es visible como si hubiera iniciado sesión y, lo que es peor, a veces muestra el nombre de otro usuario que inició sesión justo antes y activó el almacenamiento en caché. Es lógico, por supuesto, ya que creo que el marco de almacenamiento en caché almacena en caché toda la página.
Mi pregunta es: ¿cómo lidias con esto? ¿Necesito algún tipo de almacenamiento en caché basado en el usuario o hay mejores formas de evitar esto? Quiero decir, ¿debe haber habido otras personas encontrando el mismo problema?
Dado el síntoma, asumo que está utilizando el caché del sitio global o el caché de la página . En ambos casos, mantendrá todas las respuestas en caché sin preocuparse por el usuario actual o lo que sea.
Lo que necesita aquí es usar el almacenamiento en caché de fragmentos y crear sus claves de caché según lo que sea específico del usuario y lo que no.