他们似乎做同样的事情。功能,用途等有区别吗?在什么情况下应该使用另一个?
由于
答案 0 :(得分:2)
从功能的角度来看,他们确实做了同样的事情。除了开发人员想要组织代码的方式之外,没有理由更喜欢这个而不是另一个。
编辑:根据@knbk的优秀答案,您应该使用connect
函数进行特定操作,例如传递回调函数列表。
来自Django documentation on signals:
有两种方法可以将接收器连接到信号。您可以采用手动连接路线:
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!")
答案 1 :(得分:1)
@receiver
是Signal.connect()
的精简包装。唯一的区别是@receiver
不仅可以接受单个信号,还可以接受list
或tuple
个信号,它会将函数连接到每个信号。
如果您查看source code,@receiver
只会调用signal.connect(func)
并返回原始功能。