Viv*_*han 23 python django django-signals
我是Django的新手,我无法理解如何使用Django信号.任何人都可以用简单的例子解释" Django信号 "吗?
提前致谢.
Pra*_*aur 33
通过非常小的研究,您可以在互联网上找到关于django信号的非常好的内容.
在这里,我将向您简要介绍Django信号.
什么是Django信号?
信号允许某些发送者通知一组接收者某些动作已经发生
行动:
调用model的save()方法.
django.db.models.signals.pre_save | post_save
调用model的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)
Run Code Online (Sandbox Code Playgroud)
贝壳
In [1]: obj = Customer(name='foo', description='foo in detail')
In [2]: obj.save()
Save is called
Run Code Online (Sandbox Code Playgroud)
Man*_*hit 15
除了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"
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此链接.