Django Signals 信號

Django Signals 信號

入門

# receiver 接收者
# sender是必選參數
def my_callback(sender, **kwargs):
    print sender
    print kwargs
    print("Request finished!")

# 關聯信號和接受者
# 但是連接的時候 sender可以是None, 一種特殊類型的sender, 表示不在意發送者類型(其實就是默認類型).
from django.core.signals import request_finished
request_finished.connect(my_callback)

# 另一種關聯方式
@receiver(request_finished)
def my_callback(sender, **kwargs):
    # **kwargs 和 sender 中的 **kwargs 對應
    pass

# 信號定義
request_finished = Signal()

# 發送信號
# sender必選, 可以是None
request_finished.send(sender=***,**kwargs)

# 斷開信號
Signal.disconnect(receiver=None, sender=None, dispatch_uid=None)

connect

sender 可以是任意類型

  • None – 任意發送者都可以
  • 對象,字符串,都可以. 只要可以hash

weak receiver在signal對象中被維護成一個弱引用列表.
如果receiver是一個局部變量, 這個receiver就丟了.
如果weak是false. 可以避免這個情況.

dispatch_uid 綁定多次會出問題,此id可以避免綁定多次的情況.
譬如,綁定兩次,self.receivers 就會出現兩次,那麼receiver就會被調用兩次.

# Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)
@receiver(pre_save, sender=MyModel, weak=True, dispatch_uid=None)
def my_handler(sender, **kwargs):
    ...
'''The my_handler function will only be called when an instance of MyModel is saved'''

e called when an instance of MyModel is saved’’’


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章