2014-01-13 43 views
0

信号是Django非常有用的一部分,但我很难确定何时它们真的有必要。看看下面的ambiguious例如:Django确定是否需要信号

class FooBar(models.Model): 
    some_field = models.something(#...) 

    def func(self): 
     # do something 
     signals.some_signal.send(#...) 

所以这将发送每当func方法被调用信号。但是,人们也可以做到以下几点:

def func(self): 
    # do something 
    # do what was in the receiver function 

是否有何时使用一个信号的任何分类,以及何时只是包括它在原来的位置?看起来好像大多数情况都可以同时工作......信号是否更加优化?详细的解释是我正在寻找的。先谢谢了!

回答

2

信号或事件背后的想法是某些来源产生它们,而其他人消耗它们而不知道彼此

因此,尽管您的示例确实在技术上有效,但它在func()和接收器函数之间创建了一个硬依赖关系。如果接收器消失或发生变化,您总是需要检查func()

有了信号,func()只是发布一个信号。任何可能感兴趣的人(可能有几十个接收者或没有接收者)会通知func()