跳转至

信号

参考: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)

模型创建、保存和删除信号

Django built-in signals