Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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
Django信号发射一次,接收两次——为什么?_Django_Django Signals - Fatal编程技术网

Django信号发射一次,接收两次——为什么?

Django信号发射一次,接收两次——为什么?,django,django-signals,Django,Django Signals,我正在处理Django信号,但它们似乎被接收两次,即使发出一次。下面是我正在使用的代码(这是一个简单的包装器,可与Django一起使用Uploadify) (我刚刚注意到我的信号拼写错误) 我肯定你注意到了里面的打印声明。在控制台上,显示以下内容: (server starts) connecting signal ... sending signal upload received handler upload received handler # << == wher

我正在处理Django信号,但它们似乎被接收两次,即使发出一次。下面是我正在使用的代码(这是一个简单的包装器,可与Django一起使用Uploadify)

(我刚刚注意到我的信号拼写错误)

我肯定你注意到了里面的打印声明。在控制台上,显示以下内容:

(server starts)
connecting signal

...

sending signal
upload received handler
upload received handler     # << == where is this 2nd one coming from?
127.0.0.1 - - [25/Sep/2009 07:28:22] "POST /uploadify/upload/ HTTP/1.1" 200 -
(服务器启动)
连接信号
...
发送信号
上载收到的处理程序

上载收到的处理程序#我以前也遇到过这种情况,这是由于您连接的模块将信号导入了两次。要确保信号未连接两次,可以设置调度uid:

upload_recieved.connect(upload_received_handler, dispatch_uid="some.unique.string.id")
更新 这里实际上有文档记录:

您可以检查函数中的“created”参数,您正在连接的信号分别返回True和False

def task_feedback_status_handler(sender, instance, created, **kwargs):
do something
post_save.connect(task_feedback_status_handler, sender=Feedback)

至于为什么会出现POST log行,我相信服务器会等到请求完成后再进行日志记录——只有这样,它才能知道是否存在导致500状态码的服务器错误,与成功的请求相比,如果日志格式包含500状态码,则请求需要多长时间,官方链接:有没有确定字符串应该是什么的最佳实践?添加一些任意字符串来解决问题似乎。。。任意。我通常遵循的惯例是app.model.model\u receiver\u function\u属于
。每次保存项目时都要调用的函数可能会被修饰如下:
@receiver(post\u save,sender=Project,dispatch\u uid='projects.Project.reindex')
def task_feedback_status_handler(sender, instance, created, **kwargs):
do something
post_save.connect(task_feedback_status_handler, sender=Feedback)