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