Присоединение обработчика сигналов к нескольким сигналам для Facebook, как система уведомлений в Django - PullRequest
1 голос
/ 16 января 2012

Я внедрил систему уведомлений в моем проекте 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 Ответ

1 голос
/ 16 января 2012

Возможно, вы захотите взглянуть на django-activity-stream , который является вариантом того, что вы делаете. Преимущество его использования состоит в том, что он пытается соответствовать разрабатываемым стандартам Activty Streams .

...