将信号处理程序附加到Facebook的多个信号,如django中的通知系统

时间:2012-01-16 15:14:49

标签: django notifications django-signals

我在我的Django项目中实现了一个通知系统,每当有人评论他们的帖子/博客或喜欢它时,用户都会收到通知。我基本上是在创建一个数据库条目,每次都向用户提取未读的通知。

我的通知表是

class notifications(models.Model):
    time = models.DateTimeField(blank=True)
    message = models.TextField()
    object_type = models.CharField(max_length=255)
    object_url = models.CharField(max_length=500)
    n_reciever = models.IntegerField()
    n_sender = models.ForeignKey(User,null=True)
    is_read = models.BooleanField(default=False)

    def save(self, *args, **kwargs):
        if not self.id:
            self.time = datetime.datetime.now()
        super(notifications, self).save(*args, **kwargs)

每次对象被评论或喜欢或设置为收藏时,我都可以生成一个信号,该信号将由负责​​在此表中输入的信号处理程序捕获。

我正在使用自定义中间件检查每个页面刷新是否有新通知,方法是查询表中is_read字段为false的对象。我已将表格设为通用,以便它可以包含任何类型活动的通知。

所以情况可以归结为我有多个信号,对于每个信号,我有相同的信号处理程序,它将在数据库中生成所需的条目。我怎么能这样做?

我可以做这样的事吗

blog_liked.connect(notification_handler)
blog_set_favorite.connect(notification_handler)
.
.
.

即。将相同的处理程序与多个信号联系起来,我将确保所有信号都发送相同的数据。

我还要感谢我用于为用户生成通知的技术的任何反馈。

1 个答案:

答案 0 :(得分:1)

您可能需要查看django-activity-stream,这是您正在做的事情的变体。使用它的好处是它试图与正在开发的Activty Streams标准相匹配。