2015-01-06 83 views
12

我是django的新手,我無法理解如何使用django信號。任何人都可以用簡單的例子來解釋「Django信號」嗎?Django - 信號。簡單的例子開始

在此先感謝..

+3

你能更具體?該手冊已經有一些例子:https://docs.djangoproject.com/en/1.7/topics/signals/ – Wolph

回答

19

您可以通過執行非常小的研究發現約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(create_customer, sender=Customer) 

殼牌

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

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

除了由PRASHANT給出的交代,你也可以使用接收機裝飾出現在django.dispatch模塊。

例如。

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" 

欲瞭解更多信息,請參考以下網站給出: - https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html