2015-01-06 19 views
12

Sono nuovo del django e non sono in grado di capire come lavorare con i segnali di Django. Qualcuno può spiegare "segnali django" con semplici esempi?Django - segnali. Semplici esempi per iniziare

Grazie in anticipo ..

+3

Può essere più preciso? Il manuale ha già alcuni esempi: https://docs.djangoproject.com/en/1.7/topics/signals/ – Wolph

risposta

19

Potete trovare molto buoni contenuti sui segnali Django su internet facendo molto piccola ricerca.

Qui vi spiegherò molto brevemente sui segnali di Django.
Quali sono i segnali di Django?
segnali permettono determinati mittenti di notificare una serie di ricevitori che una certa azione ha avuto luogo

azioni: metodo Save()

del modello si chiama.
django.db.models.signals.pre_save | post_save

Il metodo delete() viene chiamato.
django.db.models.signals.pre_delete | post_delete

ManyToManyField su un modello è stato modificato.
django.db.models.signals.m2m_changed

Django inizia o finisce una richiesta HTTP.
django.core.signals.request_started | request_finished

Tutti i segnali sono istanze django.dispatch.Signal.

esempio molto semplice:

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(create_customer, sender=Customer) 

Shell

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

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

A parte la spiegazione data dal Prashant, è anche possibile utilizzare ricevitore decoratore presente in modulo django.dispatch.

es.

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" 

Per ulteriori informazioni, vedere link qui di seguito: - https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html