Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django 1.8-信号-什么';@receiver decorator和Signal.connect()方法之间的区别是什么?_Python_Django_Signals_Decorator_Receiver - Fatal编程技术网

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)
并返回原始函数