2009-09-25 15 views
17

मैं Django सिग्नल के साथ काम कर रहा हूं, लेकिन उन्हें दो बार प्राप्त होने लगते हैं, भले ही एक बार उत्सर्जित हो। यहाँ कोड के साथ मैं काम कर रहा हूँ (यह 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

इस से पहले मुझे क्या हुआ है (यह भी अजीब क्यों Django पेज पोस्ट रिपोर्ट करता है के बाद संकेत निकाल दिया जाता है?) है और यह की वजह से था मॉड्यूल जहां आप सिग्नल को दो बार आयात किए जा रहे हैं।

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

अद्यतन यह वास्तव में यहाँ प्रलेखित है:: सुनिश्चित करें कि संकेत दो बार जुड़ा हुआ नहीं है आप dispatch_uid सेट कर सकते हैं बनाने के http://code.djangoproject.com/wiki/Signals#Helppost_saveseemstobeemittedtwiceforeachsave

+0

बहुत उपयोगी! धन्यवाद। –

+1

आधिकारिक लिंक: http://docs.djangoproject.com/en/dev/topics/signals/#preventing-duplicate-signals – Paolo

+2

क्या यह निर्धारित करने के लिए कोई सर्वोत्तम अभ्यास है कि स्ट्रिंग क्या होनी चाहिए? समस्या को हल करने के लिए कुछ मनमाने ढंग से स्ट्रिंग जोड़ना ... मनमाना लगता है। – MrOodles

संबंधित मुद्दे