In meiner Django-App muss ich einige regelmäßige Hintergrundjobs ausführen, wenn sich ein Benutzer anmeldet, und sie nicht mehr ausführen, wenn sich der Benutzer abmeldet. Daher suche ich nach einer eleganten Möglichkeit, dies zu tun
- Benachrichtigung über ein Benutzer-Login / Logout
- Benutzeranmeldestatus abfragen
Aus meiner Sicht wäre die ideale Lösung
- ein von jedem
django.contrib.auth.views.login
und gesendetes Signal... views.logout
- eine Methode
django.contrib.auth.models.User.is_logged_in()
, analog zu... User.is_active()
oder... User.is_authenticated()
Django 1.1.1 hat das nicht und ich zögere es, die Quelle zu patchen und hinzuzufügen (ich bin mir sowieso nicht sicher, wie ich das machen soll).
Als vorübergehende Lösung habe ich is_logged_in
dem UserProfile-Modell ein boolesches Feld hinzugefügt , das standardmäßig gelöscht wird, beim ersten Aufrufen der Zielseite durch den Benutzer festgelegt wird (definiert durch LOGIN_REDIRECT_URL = '/'
) und in nachfolgenden Anforderungen abgefragt wird. Ich habe es zu UserProfile hinzugefügt, damit ich das integrierte Benutzermodell nicht nur für diesen Zweck ableiten und anpassen muss.
Ich mag diese Lösung nicht. Wenn der Benutzer explizit auf die Schaltfläche zum Abmelden klickt, kann ich das Flag löschen. In den meisten Fällen verlassen Benutzer jedoch nur die Seite oder schließen den Browser. Das Löschen der Flagge in diesen Fällen scheint mir nicht einfach zu sein. Außerdem (das ist aber eher Datenmodell-Klarheit, Nitpicking) is_logged_in
gehört nicht in das UserProfile, sondern in das User-Modell.
Kann sich jemand alternative Ansätze vorstellen?