代码之家  ›  专栏  ›  技术社区  ›  T. Stone

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

  •  17
  • T. Stone  · 技术社区  · 15 年前

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

    # 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在发出信号后报告页面帖子?)

    1 回复  |  直到 7 年前
        1
  •  21
  •   Ricky    15 年前

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

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

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