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() 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值