Django确定信号是否必要

时间:2014-01-13 15:54:22

标签: python django signals

信号是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

是否有任何关于何时使用信号的分类,以及何时将其包含在原始位置?似乎大多数情况都可以双向工作......信号只是更优化?我正在寻找详细的解释。先谢谢!

1 个答案:

答案 0 :(得分:2)

信号或事件背后的想法是某些来源生成它们而其他人消费它们而不了解彼此

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

通过信号,func()只发布一个信号。谁可能感兴趣(可能有几十个接收者或没有接收者)收到通知而不对func()进行任何更改。