2010-08-10 2 views
7

Pardonnez-moi si cette question n'a pas de sens; J'ai peu dormi dernièrement.Envoyer des messages à l'utilisateur via des signaux django

Je souhaite envoyer une notification à l'utilisateur chaque fois qu'un signal se déclenche via le module de messages de django, mais je ne sais pas comment passer l'objet request à la méthode messages.success. Je le fais parce que chaque fois qu'un utilisateur obtient un badge, je dois lui en parler. Par exemple, lorsqu'un utilisateur termine son profil, attribue un nombre d'évaluations ou attribue un certain nombre de commentaires à un badge. À l'heure actuelle, la seule façon pour l'utilisateur de dire qu'elle a un nouveau badge est d'aller à la page d'insigne, mais je veux informer doucement l'utilisateur de l'événement. L'utilisation des notifications django fonctionnerait, mais le système que nous avons en place serait trop discordant (il charge actuellement un modal) et plus cher puisqu'il touche la base de données.

Merci d'avance.

+1

Vous ne voulez probablement pas faire cela. S'il vous plaît expliquer pourquoi vous essayez quelque chose comme ça. Il suffit d'afficher le message dans votre modèle est la solution habituelle. Qu'essayez-vous de faire? –

+0

"chaque fois qu'un utilisateur obtient un badge"? Quelle? –

Répondre

7

La structure des messages Django fonctionne sur les requêtes HTTP plutôt que sur les utilisateurs (elle fonctionne donc aussi pour les utilisateurs anonymes). Un signal n'aurait aucune idée de la requête à laquelle joindre un message, et il est probable que l'utilisateur en question ne serait même pas connecté à ce moment-là.

Il semble que ce que vous essayez de faire serait mieux adapté à quelque chose comme django-notification, http://github.com/jtauber/django-notification/.

+0

Merci, c'est exactement ce que je cherche. – IntrepidDude

+0

Ugh ... après réexamen, la route de notification django semble moins séduisante. La minimisation des requêtes sur la base de données est une priorité. – IntrepidDude

+0

Haha, il m'a seulement fallu quatre ans pour réaliser que cela répond à toutes les exigences spécifiées dans ma question. – IntrepidDude

2

Vous ne pouvez pas utiliser la structure de messages directement dans un signal car vous n'avez pas accès à une demande.

Vous pourriez probablement contourner ce problème en renvoyant une vue que l'utilisateur est susceptible de fréquenter avec quelque chose qui vérifie les nouveaux badges et crée un message. Alors même s'ils ne recevraient pas le message sur la page suivante, après avoir reçu le badge, ils l'obtiendraient sur la première page consultée après la page qui crée le message.

Questions connexes