2014-01-13 71 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()