Django Academy · レッスン

Receiverの正しい接続

問題を避けるため、apps.pyでシグナルを登録します

レッスン 2/413 ステップ

「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):
    pass

AppConfig.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 signals

default_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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. post_saveとpre_deleteシグナル
  2. Receiverの正しい接続
  3. カスタムMiddlewareの作成
  4. Middlewareの順序とprocess_view
← Django Academyに戻る