Python 对django信号进行排序';s接收器

Python 对django信号进行排序';s接收器,python,django,signals,Python,Django,Signals,Django以自己的方式调用接收方方法。有什么方法可以对Django信号的接收器进行分类吗?我在Django官方文档中没有找到任何与此相关的信息。除非我弄错了,否则没有任何理由为同一信号和发送方配备多个接收器。这是可能的,但我不认为这是正确的方法,而且您将无法明确控制每种方法的调用顺序 例如,如果您有一组重复信号(执行不同的操作),如下所示: 这是可行的,但执行顺序并不明确。但是,您可以将其重写为以下内容,以明确说明执行顺序: from django.db.models import signa

Django以自己的方式调用接收方方法。有什么方法可以对Django信号的接收器进行分类吗?我在Django官方文档中没有找到任何与此相关的信息。

除非我弄错了,否则没有任何理由为同一
信号和
发送方配备多个接收器。这是可能的,但我不认为这是正确的方法,而且您将无法明确控制每种方法的调用顺序

例如,如果您有一组重复信号(执行不同的操作),如下所示:

这是可行的,但执行顺序并不明确。但是,您可以将其重写为以下内容,以明确说明执行顺序:

from django.db.models import signals
from django.dispatch import receiver
from django.contrib.auth import get_user_model


User = get_user_model()


def signal_receiver_1(*args, **kwargs):
    pass

def signal_receiver_2(*args, **kwargs):
    pass

def signal_receiver_3(*args, **kwargs):
    pass

@receiver(signals.pre_save, sender=User):
def pre_save_signal_receiver_master(*args, **kwargs):
    signal_receiver_1(*args, **kwargs)
    signal_receiver_2(*args, **kwargs)
    signal_receiver_3(*args, **kwargs)

“信号的所有接收器函数按注册顺序一次调用一个。”

尝试:

输出将是:

RECEIVER 1
RECEIVER 2
RECEIVER 3

然后把它混合起来…

你说的对接收器进行排序是什么意思?你想实现什么?信号是为松耦合设计的,定义顺序意味着定义监听器,这与设计意图相反。
@receiver(signals.pre_save, sender=User)
def signal_receiver_1(*args, **kwargs):
    print('RECEIVER 1')

@receiver(signals.pre_save, sender=User)
def signal_receiver_2(*args, **kwargs):
    print('RECEIVER 2')

@receiver(signals.pre_save, sender=User)
def signal_receiver_3(*args, **kwargs):
    print('RECEIVER 3')
RECEIVER 1
RECEIVER 2
RECEIVER 3