Dans mon application Django, j'ai besoin de commencer à exécuter quelques tâches de fond périodiques lorsque qu'un utilisateur se connecte et les arrêter lorsqu'il se déconnecte, je recherche donc un moyen élégant de
- être notifié d'une connexion/déconnexion d'un utilisateur
- vérifier 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()
, analogue à... User.is_active()
ou... User.is_authenticated()
Django 1.1.1 ne possède pas cela et je suis réticent à modifier la source pour l'ajouter (de toute façon, je ne sais pas comment faire).
En guise de solution temporaire, j'ai ajouté un champ booléen is_logged_in
au modèle UserProfile qui est effacé par défaut, est défini la première fois que l'utilisateur accède à la page d'accueil (définie par LOGIN_REDIRECT_URL = '/'
) et est vérifié dans les requêtes suivantes. Je l'ai ajouté à UserProfile, donc je n'ai pas à dériver et personnaliser le modèle User intégré à cette seule fin.
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 paraît pas évident. En outre (même si c'est plutôt pointilleux en termes de clarté du modèle de données), is_logged_in
ne devrait pas être dans UserProfile, mais dans le modèle User.
Est-ce que quelqu'un peut penser à d'autres approches ?
4 votes
Veuillez envisager de choisir une nouvelle réponse. Celle actuellement acceptée est un choix très mauvais à la lumière du signal ajouté en 1.3.
1 votes
Vous avez raison; réponse acceptée modifiée.