我是Django的新手,我无法理解如何使用Django信号。任何人都可以用简单的例子解释“ Django信号”吗?
提前致谢。
答案 0 :(得分:28)
通过非常小的研究,您可以在互联网上找到关于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
答案 1 :(得分:14)
除了Prashant给出的解释外,您还可以使用django.dispatch
模块中的 receiver 装饰器。
e.g。
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。
答案 2 :(得分:0)
在signals.post_save.connect(receiver = create_customer,sender = Customer)...中,发件人永远是我们正在定义的模型...或者我们也可以在发件人中使用用户。