Django Signals
1.什么是signal?
在特定事件发生时, 使用signal 发送者 能够通知一系列 接收者(一个或者多个).
python 本身没有类似机制的支持, 但是 django 基于 PyDispatcher 进行了性能 和代码结构上的优化来增加了signal功能.
2.使用signal
2.1. 代码结构
├── manage.py
├── signalapp
│ ├── __init__.py
│ ├── models.py
│ ├── signals.py
│ ├── tests.py
│ ├── urls.py
│ ├── views.py
├── signaltest
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── wsgi.py
└── yann
2.2. 注册signal
import django.dispatch
save_done = django.dispatch.Signal(providing_args=['obj'])
2.3关联signal到对应的listener
from django.db import models
import signals
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
is_public = models.BooleanField(default=True, blank=True)
def send(self):
signals.save_done.send(sender=Article, obj=self)
def __unicode__(self):
return self.title
def chufa_Func(sender, **kwargs):
print "SIGNAL"
if "obj" in kwargs:
obj = kwargs.get("obj")
signals.save_done.connect(chufa_Func,sender=Article)
2.4触发监听事件
article = Article(title="", content="")
article.send()