web-dev-qa-db-fra.com

Django - signaux. Exemples simples pour commencer

Je suis nouveau sur Django et je ne suis pas en mesure de comprendre comment travailler avec les signaux Django. Quelqu'un peut-il expliquer "signaux Django "avec des exemples simples?

Merci d'avance.

24
Vivek Ananthan

Vous pouvez trouver un très bon contenu sur les signaux Django sur Internet en faisant de très petites recherches.

Ici, je vais vous expliquer très brièvement les signaux Django.
Que sont Django signaux?
Les signaux permettent à certains expéditeurs d'informer un ensemble de destinataires qu'une action a eu lieu

Actions :

la méthode save () du modèle est appelée.
Django.db.models.signals.pre_save | post_save

la méthode delete () du modèle est appelée.
Django.db.models.signals.pre_delete | post_delete

ManyToManyField sur un modèle est modifié.
Django.db.models.signals.m2m_changed

Django démarre ou termine une requête HTTP.
Django.core.signals.request_started | request_finished

Tous les signaux sont des instances Django.dispatch.Signal.

exemple très basique:

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)

Shell

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

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

Outre l'explication donnée par Prashant, vous pouvez également utiliser récepteur décorateur présent dans Django.dispatch module.

par exemple.

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"

Pour plus d'informations, reportez-vous à cette lien .

15