0

Django で、別のシグナルでアクションを生成するとはどういう意味ですか?

たとえば、このドキュメントは次のとおりです: https://github.com/brantyoung/django-notifications

それは次のように述べています:通知の生成は、おそらく別のシグナルで行うのが最善です。

4

2 に答える 2

1

あなたが言及したドキュメントには、例で使用される2つのシグナルがあります。最初のものはnotifications.notifyで、もう 1 つはdjango.db.models.signals.post_saveです。

通知アプリを使用するには、基本的に最初の信号のみが必要です。たとえば、コード内の任意の場所に次のように記述できます。

notify.send(request.user, verb='reached level 10')

ただし、ライターは、別のシグナルを処理した後(または処理するとき) に通知シグナルを送信することをお勧めします。したがって、以下の例:

def my_handler(sender, instance, created, **kwargs):
    #other routines here
    notify.send(instance, verb='was saved')

post_save.connect(my_handler, sender=MyModel)

つまり、通知シグナルを post_save シグナル ハンドラーの一部として送信します。

于 2012-12-13T17:27:30.387 に答える
1

Django にはsignalling system、特定のイベントが発生したときに起動される関数 (シグナル ハンドラー) を簡単にアタッチできる があります。モデルオブジェクトが保存または削除されたときなど、デフォルトのイベントがいくつかありますが、独自のイベントを作成して、後でコードを簡単に添付することもできます。

https://docs.djangoproject.com/en/dev/topics/signals/

Django には「シグナル ディスパッチャー」が含まれており、フレームワーク内の別の場所でアクションが発生したときに分離されたアプリケーションに通知できるようにします。簡単に言えば、シグナルを使用すると、特定の送信者が一連の受信者に何らかのアクションが発生したことを通知できます。これらは、多くのコードが同じイベントに関係している可能性がある場合に特に役立ちます。

これらに関して注意すべき非常に重要なことsignalsは、これらのアクションがリクエスト/レスポンス ループの外で非同期に起動されると考えがちですが、そうではないということです。これらはイベントにアクションを追加する直感的な方法です (つまり、X が保存されたら Y を実行します)。

于 2012-12-13T17:13:13.587 に答える