Dans mon application Django, je dois commencer à exécuter quelques tâches périodiques en arrière-plan lorsqu'un utilisateur se connecte et les arrêter lorsque l'utilisateur se déconnecte.
- être informé de la connexion ou de la déconnexion d'un utilisateur
- demander le statut de connexion de l'utilisateur
De mon point de vue, la solution idéale serait
- un signal envoyé par chaque
django.contrib.auth.views.login
et... views.logout
- une méthode
django.contrib.auth.models.User.is_logged_in()
analogues à... User.is_active()
ou... User.is_authenticated()
Django 1.1.1 n'en dispose pas et je suis réticent à patcher le code source pour l'ajouter (je ne suis pas sûr de savoir comment le faire, de toute façon).
Comme solution temporaire, j'ai ajouté un is_logged_in
dans le modèle UserProfile, qui est désactivé par défaut, est activé la première fois que l'utilisateur accède à la page de renvoi (définie par le paramètre LOGIN_REDIRECT_URL = '/'
) et est interrogé dans les requêtes suivantes. Je l'ai ajouté à UserProfile, pour ne pas avoir à dériver du modèle User intégré et à le personnaliser dans ce seul but.
Je n'aime pas cette solution. Si l'utilisateur clique explicitement sur le bouton de déconnexion, je peux effacer le drapeau, mais la plupart du temps, les utilisateurs quittent simplement la page ou ferment le navigateur ; effacer le drapeau dans ces cas ne me semble pas simple. Par ailleurs, il s'agit plutôt de pinailler sur la clarté du modèle de données, is_logged_in
n'a pas sa place dans le UserProfile, mais dans le modèle User.
Quelqu'un peut-il penser à d'autres approches ?
4 votes
Veuillez envisager de sélectionner une nouvelle réponse. La réponse actuellement acceptée est un très mauvais choix à la lumière du signal ajouté en 1.3.
1 votes
Vous avez raison ; j'ai changé la réponse acceptée.