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