信号
参考:Django 文档
Django 内置一个信号分发机制,sender 提醒 receiver 事件或行动的发生。Django 还内置一些信号如模型保存、收到请求等。
# request_finished 是一个信号
from django.core.signals import request_finished
# Receiver 函数
def my_callback_1(sender, **kwargs):
print("Request finished!")
# 注册 receiver
request_finished.connect(my_callback_1)
# 或使用 @receiver
from django.dispatch import receiver
@receiver(request_finished)
def my_callback_2(sender, **kwargs):
print("Request finished!")
# 注销 receiver
request_finished.connect(my_callback_1)
request_finished.connect(my_callback_2)
Info
注意防止重复,详见 Django 文档。主要是注意 ready() 和 dispatch_uid。
自定义信号
import django.dispatch
# 自定义信号 pizza_done
pizza_done = django.dispatch.Signal()
class PizzaStore:
def send_pizza(self, toppings, size):
# 发送 pizza_done 信号
pizza_done.send(sender=self.__class__, toppings=toppings, size=size)