web-dev-qa-db-ja.com

Django-シグナル。開始する簡単な例

私はDjangoに不慣れで、Djangoシグナルの操作方法を理解できません。だれでも説明できますか "Djangoシグナル簡単な例を使って?

前もって感謝します。

24
Vivek Ananthan

Django信号はインターネットを介して非常に小さな調査を行うことによって非常に良いコンテンツを見つけることができます。

ここでは、Djangoシグナルについて非常に簡単に説明します。
Djangoシグナルとは?とは
信号により、特定の送信者は、何らかのアクションが発生したことを一連の受信者に通知できます

行動 :

モデルのsave()メソッドが呼び出されます。
Django.db.models.signals.pre_save | post_save

モデルのdelete()メソッドが呼び出されます。
Django.db.models.signals.pre_delete | post_delete

モデルのManyToManyFieldが変更されます。
Django.db.models.signals.m2m_changed

DjangoはHTTPリクエストを開始または終了します。
Django.core.signals.request_started | request_finished

すべてのシグナルはDjango.dispatch.Signalインスタンスです。

非常に基本的な例:

models.py

from Django.db import models
from Django.db.models import signals

def create_customer(sender, instance, created, **kwargs):
    print "Save is called"

class Customer(models.Model):
    name = models.CharField(max_length=16)
    description = models.CharField(max_length=32)

signals.post_save.connect(receiver=create_customer, sender=Customer)

シェル

In [1]: obj = Customer(name='foo', description='foo in detail')

In [2]: obj.save()
Save is called
33
Prashant

Prashantによる説明とは別に、Django.dispatchモジュールにあるreceiverデコレータを使用することもできます。

例えば.

from Django.db import models
from Django.db.models import signals
from Django.dispatch import receiver

class Customer(models.Model):
    name = models.CharField(max_length=16)
    description = models.CharField(max_length=32)

@receiver(signals.pre_save, sender=Customer)
def create_customer(sender, instance, created, **kwargs):
    print "customer created"

詳細については、この link を参照してください。