2012-01-16 11 views
0

Djangoプロジェクトに通知システムを実装しました。投稿システムに通知機能が実装されています。私は基本的にデータベースのエントリを作成し、毎回未読の通知をユーザに取得しています。Facebookの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) 
. 
. 
. 

ような何かを行うことができ、私はすべての信号が同じデータを送信することを保証します。

私はユーザーのための通知を生成するために使用しているテクニックのフィードバックも感謝します。

+0

あなたはそれを理解したようですか? 'blog_liked = django.dispatch.Signal()'で新しいシグナルを定義することができます。もしそれが問題であれば、特に問題がありますか? – AdamKG

+0

私の質問は、複数の信号で同じハンドラを関連付けることができます。 – Sachin

+2

はい、できます。各信号を通知ハンドラに接続するだけです。あなたが持っているコードはうまくいくはずです。 – AdamKG

答えて

1

django-activity-streamは、あなたがやっていることの変種です。これを使用する利点は、標準化されているActivty Streamsと一致するようにしようとしていることです。

関連する問題