クラス/メソッド | なぜ |
---|---|
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つのスクープに基づいてシグナルを使用しないでください :
save()
によって呼び出されsave()
。 次の場合に信号を使用しても問題ありません。
save()
またはinit()
に基づいて何かをトリガーしたいとします。サードパーティのコードを変更することはできません。拡張が不可能な場合もあります。したがって、シグナルがコールバックのトリガーとなります。