Site-weiter Caching mit Django - Problemen mit Passwort geschützten Seiten beim Abmelden

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

  •  05-07-2019
  •  | 
  •  

Frage

Ich habe vor kurzem der gesamten Site Caching Memcached auf meiner Django-Anwendung implementiert haben, ich habe setzen die TTL bis etwa 500 Sekunden und pro Ansicht Caches auf anderen Teilen der Web-Anwendung implementieren .

Das Problem, das ich habe, ist, dass, wenn sich ein Benutzer abmeldet, weil es sich um eine Form Post verhält sich der Ort wie erwartet, aber wenn sie zu einem passwortgeschützten Teil der Website gehen dann verhält sich die Anwendung, als ob sie noch angemeldet haben , es sei denn, sie treffen „refresh“. Ich bin neu in Caching und mich gefragt, ob ich etwas tun kann, klug, dies zu verhindern?

War es hilfreich?

Lösung

Ich lief in ähnliche Probleme. Der Standard Django Weg ist Cache für authentifizierte Benutzer zu sperren.

#settings.py
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True

Es funktioniert gut, wenn verschiedene Benutzer verschiedene Seiten sehen (Beispiel: die Benutzername auf sie). Und man kann nicht eine Version für sie hat

Aber wenn es nur zwei Versionen der Seite ist: für authentifizierte Benutzer und für die andere, dann ist es nicht gut, vollständig zu deaktivieren Cache für authentifizierte Benutzer. Ich schrieb eine App , dass neben allem macht es möglich, fein- tune Cache in diesem Fall.

Aktualisieren.

BTW: Sie erwähnt, dass, wenn Sie auf ‚Aktualisieren‘ korrekte Version der Seite empfangen wird. Es bedeutet, dass Problem ist clientseitige Cache (Expires Header oder E-Tag), nicht der Server-Cache.

Client-seitiges Caching verhindern (was Sie tun müssen, wenn Sie mehrere Versionen von Seite unter der gleichen URL haben) verwenden @cache_control(must_revalidate=True) Dekorateur.

Andere Tipps

In der Sicht eines passwortgeschützten Teils der Website, überprüfen Sie, ob der Benutzer registriert ist oder anonym, bevor die Daten zu holen (und vielleicht auch Daten aus dem Cache zu bringen)?

Sie sollten. Django hilft Ihnen, mit einem Login erforderlich Dekorateur Sie auf der Ansicht platzieren können. Schau dir das an: http://docs.djangoproject.com/en / dev / Themen / auth / # the-Login-required-Dekorateur

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top