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

2024-05-01

我正在使用 Django 信号,但即使发出一次,它们似乎也会被接收两次。这是我正在使用的代码(这是一个将 Uploadify 与 Django 结合使用的简单包装器)...

# Signal-emitting code... emits whenever a file upload is received
# ----------------------------------------------------------------
upload_recieved = django.dispatch.Signal(providing_args=['data'])

def upload(request, *args, **kwargs):
    if request.method == 'POST':
        if request.FILES:
            print 'sending signal'
            upload_recieved.send(sender='uploadify', data=request.FILES['Filedata'])
    return HttpResponse('True')

# Signal-receiving code...
# ----------------------------------------------------------------    
def upload_received_handler(sender, data, **kwargs):
    print 'upload received handler'

print 'connecting signal'
upload_recieved.connect(upload_received_handler)

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

我相信你注意到了那里的打印声明。在控制台上,显示的是这样的:

(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 -

(同样奇怪的是为什么 Django 在信号被触发后报告页面 POST?)


我以前也遇到过这种情况,这是由于您连接信号的模块被导入了两次。为了确保信号不会连接两次,您可以设置dispatch_uid:

upload_recieved.connect(upload_received_handler, dispatch_uid="some.unique.string.id")

UPDATE它实际上记录在这里:http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemissedtwiceforeachsave http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 信号发射一次,接收两次——为什么? 的相关文章

随机推荐