Django Signals

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) #关联 sender=Article, 用来限制只有当Article有更新时我们才会触发这个事件. 

        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() 

你可能感兴趣的:(django,python,Signal)