Receiverの正しい接続
問題を避けるため、apps.pyでシグナルを登録します
「Receiverの正しい接続」はCoddyKit上の無料Django Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDjango Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Django Academyコースには全4レッスンが含まれています。
レシーバーはインポートが必要
receiverは、Djangoがそれを含むモジュールを実際にインポートした場合にのみ機能します。ファイルが読み込まれなければ、シグナルは何もせずに終了します。
典型的な落とし穴
receiverをmodels.pyに置くと、たまたま動くこともあれば動かないこともあります。この不安定さが、避けたい接続の問題です。
signals.pyファイルを使用する
適切なパターンは、アプリ内に専用のsignals.pyを作成し、そのアプリのすべてのreceiverをわかりやすい1か所にまとめることです。
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=Profile)
def sync(sender, instance, **kwargs):
passAppConfig.readyフック
Djangoは起動時に各アプリ設定のready()を1回呼び出します。シグナルハンドラーを読み込む公式の場所はここです。
ready内でインポートする
apps.pyで、readyの内部からsignalsモジュールをインポートします。これにより、アプリの起動時にreceiverが正確に1回登録されます。
from django.apps import AppConfig
class BlogConfig(AppConfig):
name = "blog"
def ready(self):
from . import signalsdefault_app_configを指定する
アプリがその設定を使用することを確認してください。最近のDjangoではapps.pyが自動検出されるため、通常は対応するAppConfigクラスがあれば十分です。
デコレーターなしでconnectする
@receiverの代わりに、connectでハンドラーを接続することもできます。同じ役割を果たし、動的な登録に便利です。
post_save.connect(sync, sender=Profile)二重発火を避ける
モジュールが2回インポートされると、receiverも2回実行される可能性があります。登録をready()に集約すると、各ハンドラーの接続を1回だけに保てます。
dispatch_uidという安全策
一意のdispatch_uidを渡すと、再インポートが発生しても、Djangoは同じreceiverが複数回接続されるのを拒否します。
post_save.connect(sync, sender=Profile, dispatch_uid="profile_sync")レシーバーを切断する
disconnectを呼び出してハンドラーを停止することもできます。副作用を発生させたくないテストで便利です。
1つのアプリのシグナルをまとめる
各アプリのハンドラーをそれぞれのsignals.pyにまとめると、反応処理を見つけやすくでき、コードベース全体に分散するのを防げます。
簡単な確認
シグナルハンドラーを登録すべき場所を思い出しましょう。
まとめ: シグナルを正しく接続する
receiverをsignals.pyにまとめ、AppConfig.ready()からインポートし、dispatch_uidを使って重複接続を防ぐ方法を学びました。✅
AI チューターと学ぶ Python — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「Receiverの正しい接続」レッスンは無料ですか?
はい。「Receiverの正しい接続」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Django Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Django Academyコースには全4レッスンが含まれています。
「Receiverの正しい接続」で何を学びますか?
問題を避けるため、apps.pyでシグナルを登録します ブラウザで直接実行するハンズオンコードでDjango Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Django Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDjango Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「Receiverの正しい接続」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDjango Academyレッスンでコードを書いて実行できますか?
はい。すべてのDjango Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。