Python Django 1.8-信号-什么';@receiver decorator和Signal.connect()方法之间的区别是什么?
他们似乎做了同样的事情。在功能、使用等方面是否存在差异?在什么情况下应该使用一种方法而不是另一种方法Python Django 1.8-信号-什么';@receiver decorator和Signal.connect()方法之间的区别是什么?,python,django,signals,decorator,receiver,Python,Django,Signals,Decorator,Receiver,他们似乎做了同样的事情。在功能、使用等方面是否存在差异?在什么情况下应该使用一种方法而不是另一种方法 谢谢从功能的角度来看,它们确实做了完全相同的事情。除了开发人员希望如何组织代码之外,没有任何理由更喜欢其中一个 编辑:根据@knbk的优秀答案,您应该使用connect函数执行特定操作,例如传递回调函数列表 从: 有两种方法可以将接收器连接到信号。您可以采用手动连接路线: from django.core.signals import request_finished request_fini
谢谢从功能的角度来看,它们确实做了完全相同的事情。除了开发人员希望如何组织代码之外,没有任何理由更喜欢其中一个 编辑:根据@knbk的优秀答案,您应该使用
connect
函数执行特定操作,例如传递回调函数列表
从:
有两种方法可以将接收器连接到信号。您可以采用手动连接路线:
from django.core.signals import request_finished
request_finished.connect(my_callback)
或者,您可以使用receiver()装饰器:
from django.core.signals import request_finished
from django.dispatch import receiver
@receiver(request_finished)
def my_callback(sender, **kwargs):
print("Request finished!")
@receiver
是信号.connect()的薄包装。唯一的区别是,@receiver
不仅可以接受单个信号,还可以接受信号的列表
或元组
,并且它将函数连接到每个信号
如果查看,@receiver
仅调用信号.connect(func)
并返回原始函数