Django Signals 信號
入門
# receiver 接收者
def my_callback(sender, **kwargs):
print sender
print kwargs
print("Request finished!")
# 關聯信號和接受者
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()
# 發送信號
request_finished.send(sender=***,**kwargs)
# 斷開信號
Signal.disconnect(receiver=None, sender=None, dispatch_uid=None)
connect
sender 可以是任意類型
weak receiver在signal對象中被維護成一個弱引用列表.
如果receiver是一個局部變量, 這個receiver就丟了.
如果weak是false. 可以避免這個情況.
dispatch_uid 綁定多次會出問題,此id可以避免綁定多次的情況.
# Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)
@receiver(pre_save, sender=MyModel)
def my_handler(sender, **kwargs):
...
'''The my_handler function will only be called when an instance of MyModel is saved'''