Looking for django Answers? Try Ask4KnowledgeBase
Looking for django Keywords? Try Ask4Keywords

Django信号


パラメーター

クラス/メソッドなぜ
UserProfile()クラス UserProfileクラスは、 Djangoのデフォルトユーザーモデルを拡張します
create_profile()メソッド create_profile()メソッドは、Django Userモデルのpost_saveシグナルが解放されるたびに実行さます。

備考

今、詳細。

Djangoシグナルは、発生時に特定のタスク(保存前または保存後のモデルや削除など)をアプリに通知する方法です。

これらの信号を使用すると、信号がリリースされた直後に選択したアクションを実行できます。

例えば、 いつでも新しい Djangoのユーザーが作成され、ユーザーモデルは、以下のような関連付けのparamsで、信号を放出しsender=User 、あなたが特にこの場合には、発生した特定の活動への信号のリスニングをターゲットにすることができ、新しいユーザーの作成。

上記の例では、Userオブジェクトが作成された直後に、UserProfileオブジェクトを作成することを意図しています。したがって、 Userモデル(デフォルトのDjango User Model)からのpost_save信号をpost_save聞くことによって、新しいUserが作成された直後にUserProfileオブジェクトを作成します。

Djangoドキュメンテーションは、 利用可能なすべての可能なシグナルに関する豊富なドキュメントを提供しています

しかし、上記の例は、信号を使用することが有用な追加となる典型的な使用例を実際に説明することです。

「大きな力をもって、大きな責任を負う」彼らが素晴らしいのだからあなたのアプリケーションやプロジェクト全体に信号を散らばってしまうことが魅力的かもしれません。まあ、しないでください。彼らはクールだから、心に浮かぶすべての簡単な状況のための解決策にはなりません。

信号は、いつものように、すべてではありません。ログイン/ログアウト、信号は素晴らしいです。ユーザーモデルなどの兆候を放つ主要モデル。

あなたのアプリケーションのすべてのモデルのためのシグナルを作成することは、ある時点で圧倒され、Djangoシグナルのスパースな使用のアイデアを全面的に打ち負かします。

Djangoの2つのスクープに基づいてシグナルを使用しないでください

  • シグナルは特定の1つのモデルに関連し、そのモデルのメソッドの1つに移動できます。おそらくsave()によって呼び出されsave()
  • この信号は、カスタムモデルマネージャメソッドで置き換えることができます。
  • 信号は特定のビューに関連し、そのビューに移動できます

次の場合に信号を使用しても問題ありません。

  • 信号受信機は、複数のモデルに変更を加える必要があります。
  • 同じ信号を複数のアプリから送信し、共通の受信機で同じ方法で処理したいとします。
  • モデルの保存後にキャッシュを無効にしたいとします。
  • あなたはコールバックを必要とする珍しいシナリオがあり、シグナルを使用する以外にそれを処理する他の方法はありません。たとえば、サードパーティアプリケーションのモデルのsave()またはinit()に基づいて何かをトリガーしたいとします。サードパーティのコードを変更することはできません。拡張が不可能な場合もあります。したがって、シグナルがコールバックのトリガーとなります。

信号 関連する例