2009-09-25 5 views
17

나는 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 - 

+2

을 나는 믿는다 서버는 요청이 완료 될 때까지 기다렸다가 로그를 남깁니다. 그런 다음 500 개의 상태 코드와 성공적인 요청이 발생하는 서버 오류가 있었는지 여부, 로그 형식에 포함 된 요청의 소요 시간 등을 알 수 있습니다. – dcrosta

답변

21

이 전에 나에게 일어난 (또한 홀수는 신호가 발사 된 후 왜 장고 페이지 POST를보고 않습니다입니까?) 그것은 때문 가져 오는 신호를 두 번 연결할 모듈.

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

UPDATE 그것은 실제로 여기에 설명되어 있습니다 : 신호가 당신이 dispatch_uid 설정할 수 있습니다 두 번에 연결되어 있지 않은지 확인하려면 POST 로그 라인 이후에 오는 이유에 관해서는 http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave

+0

매우 유용합니다! 고맙습니다. –

+1

공식 링크 : http://docs.djangoproject.com/en/dev/topics/signals/#preventing-duplicate-signals – Paolo

+2

문자열이 무엇인지 판단하기위한 최선의 방법이 있습니까? 문제를 해결하기 위해 임의의 문자열을 추가하는 것은 임의적 인 것처럼 보입니다. – MrOodles