Djangoの信号の理解

William Shakespeare
リリース: 2025-02-08 08:29:09
オリジナル
817 人が閲覧しました

Understanding Signals in Django

このチュートリアルでは、Djangoプロジェクト内の強力なコミュニケーションメカニズムであるDjango Signalsを探ります。 モジュラーコードとスケーラブルなコードを維持し、組み込みの信号を調べ、カスタム信号を作成する方法を実証する役割をカバーします。

大規模なDjangoプロジェクトは、多くの場合、複数のアプリ(ユーザー管理、注文、製品、eコマースシステムの支払い)で構成されています。各アプリは特定の機能に焦点を当てていますが、シームレスに対話する必要があります。信号はこの通信を促進し、アプリが緊密な結合なしで他のアプリのイベントに対応できるようにします。たとえば、

アプリが注文を確認すると、

アプリはインベントリを更新できます。 Djangoの信号ディスパッチャーは仲介者として機能し、この分離されたコミュニケーションを可能にします。 productsorders重要な概念:

信号の概要:
    django信号を有効にして、分離したアプリが特定のアクションまたはイベントに関する通知を受信できます。 このチュートリアルは、シグナルがDjangoアプリケーションのさまざまな部分間の通信を可能にする方法を示しています。
  1. シグナルメカニズム:django信号は、Publisher-subscriber(pub-sub)モデルを使用します。信号送信者(「パブリッシャー」)は信号を発し、レシーバー(「サブスクライバー」)がこれらの信号に応答します。 信号のセットアップ、カスタム信号の作成、および信号のレシーバーへの接続をカバーします。
  2. 実用的なアプリケーション:注文確認や自動顧客プロファイルの作成に関する在庫の更新など、Django信号の汎用性を紹介する実用的な例を提供します。
  3. django信号の理解:
  4. django信号は通知システムです。 特定のアクションが発生したときに、「送信者」は「受信者」を通知します。これにより、分離されたアプリがアプリケーションの他の場所でイベントに対応することができます。 私たちの例では、
  5. アプリは注文確認時に信号を送信し、この信号を受信するために登録されている
アプリは、その在庫を更新します。

信号操作:

信号は、Pub-Subパターンと同様に動作します。信号送信者は出版社であり、受信者はサブスクライバーです。 受信者は、信号を受信するために登録(購読)しなければなりません ordersproducts送信者と受信者:

信号送信者は、信号を発するPythonオブジェクトです。受信機は、送信された信号に応じて実行されるPython関数またはメソッドです。登録されたレシーバーに関係なく、いくつかの信号(特に組み込みのもの)は送信されることに注意してください。

サンプルDjangoプロジェクトのセットアップ:

信号使用量を説明するために、サンプルeコマースプロジェクトを作成します。

  1. プロジェクトディレクトリ: mkdir my_shop
  2. 仮想環境:virtualenvpip install virtualenvでインストール)を使用します。 環境を作成してアクティブにします(virtualenv venv、OSに従ってアクティブ化します)。
  3. django: pip install Djangoインストール
  4. プロジェクトの作成: django-admin startproject my_shop .
  5. アプリの作成:およびpython manage.py startapp products。 両方のアプリをpython manage.py startapp orders INSTALLED_APPSsettings.pyモデルを定義します:
  6. モデルの作成
  7. (in)および(inProduct)。 移行を実行(products/models.pyおよびOrder)。orders/models.py python manage.py makemigrations python manage.py migrate
  8. djangoシグナルの基本:

モジュールのインポート:
    インポート
  1. および Signal信号インスタンスの作成:receiver(indjango.dispatch):
  2. 信号を接続する(apps.py):orders/signals.py各アプリのorder_confirmed = Signal()
  3. シグナル送信者:import orders.signalsアプリのビューでimport products.signalsの使用を確認して、注文確認後に信号を送信します。 ready()apps.py信号ハンドラー(受信者):
  4. dyoratorを使用して、受信したときにインベントリを更新する関数を作成します。 order_confirmed.send(sender=order, ...)ビルトインdjango信号:orders
  5. djangoは、(モデル信号)や(リクエスト/応答信号)などのモジュールを介してアクセス可能な多数の組み込み信号を提供します。 例には、@receiver(order_confirmed)products/signals.pyorder_confirmed、および
  6. が含まれます。 これらは、フレームワークによって自動的に送信されます。
組み込み信号を使用した

ビルトイン信号の使用はカスタム信号に似ていますが、手動で送信する必要はありません。 たとえば、django.db.models.signalsモデルのdjango.core.signals信号にレシーバーを接続するには。 pre_savepost_save実用的な例:request_startedrequest_finished

  • 自動顧客プロファイルの作成:モデルでpost_saveを使用して、新しいユーザーが作成されたときにUserプロファイルを自動的に作成します。 Customer
  • 電子メール通知:
  • モデルでを使用して、新しいコメントが投稿されたときにブログ著者に電子メール通知を送信します。 post_save Comment
  • 結論:

django信号は、アプリケーション内で分離された通信の強力なメカニズムを提供します。信号を理解して利用することにより、よりモジュール式、保守可能、スケーラブルなDjangoプロジェクトを作成できます。

以上がDjangoの信号の理解の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート