17

私は Django シグナルを扱っていますが、1 回送信されたとしても 2 回受信されるようです。これが私が取り組んでいるコードです(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 がページ POST を報告するのはなぜですか?)

4

2 に答える 2

22

これは以前にも発生しましたが、信号を接続しているモジュールが 2 回インポートされたことが原因でした。シグナルが 2 回接続されていないことを確認するには、dispatch_uid を設定します。

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

更新 実際にはここに文書化されています: http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemitedtwiceforeachsave

于 2009-09-26T01:20:11.520 に答える