2009-10-10 18 views
6

मेरे पास एक व्यवस्थापक-नियंत्रित सुविधा (डेटाबेस आयात करना) है जो खत्म करने में कुछ समय लग सकता है, इसलिए मैं उस समय उपयोगकर्ता को कुछ प्रतिक्रिया दिखाना चाहता हूं - उदाहरण के लिए एक प्रगति पट्टी, या बस कुछ संदेश। लंबी कार्रवाई के दौरान भागों में भी पृष्ठ भेजना पर्याप्त होगा।Django - कार्य प्रगति प्रदर्शित करें

Django में ऐसा करने का सबसे आसान तरीका क्या होगा?

+0

बार क्यों प्रगति नहीं? .. आप थोड़ा विस्तार से बता सकते हैं, कृप्या? – 0100110010101

+0

प्रोग्रेस बार भी ठीक रहेगा, लेकिन मुझे नहीं पता कि मैं इसे क्रियान्वित करने वाले फ़ंक्शन से कैसे नियंत्रित कर सकता हूं – hmp

उत्तर

1

किसी भी तरह के क्लाइंट-साइड स्क्रिप्टिंग, यानी अजाक्स के बिना ऐसा करने का कोई तरीका नहीं है। आपको ऐसा कुछ चाहिए जो सर्वर को नियमित अंतराल पर मतदान करेगा और उपयोगकर्ता को प्रतिक्रिया दिखाएगा। a snippet है जो दिखाता है कि यह कैसे किया जा सकता है।

बेशक, इसे संभव बनाने के लिए आपको आयात को ऑफ़लाइन प्रक्रिया में भी खेत करना होगा। यह आयात करेगा, और इसकी प्रगति कहीं नियमित रूप से (फ़ाइल में, या डेटाबेस में) रिकॉर्ड करेगा ताकि अजाक्स इसे पूछ सके। ऐसा करने का एक अच्छा तरीका celery, Django- आधारित वितरित कार्य कतार का उपयोग करना हो सकता है।

अंत में, आपको एक साधारण दृश्य की आवश्यकता होगी कि अजाक्स कॉल करेगा, जो लंबे समय तक चलने वाली प्रक्रिया (या प्रगति रिकॉर्ड को बनाता है) से पूछताछ करेगा और ग्राहक को वापस रिपोर्ट करेगा।

तो, काफी जटिल।

3
  1. अजाक्स मतदान - क्लाइंट-साइड टाइमर का उपयोग करके, आप लगातार सर्वर की स्थिति के बारे में सर्वर को मतदान करते हैं। प्रक्रिया इस तरह है: उपयोगकर्ता डेटाबेस विवरण कॉन्फ़िगर करता है और 'अपलोड' हिट करता है। फ़ाइल स्थानान्तरण और पृष्ठ अनुरोध डेटाबेस आयात करने के लिए सर्वर पर एक असीमित प्रक्रिया शुरू करता है। जब उपयोगकर्ता अपलोड पर क्लिक करता है तो यह क्लाइंट-साइड टाइमर शुरू करता है जो नियमित अंतराल पर सर्वर पर AJAX अनुरोध भेजता है ताकि वह इसकी प्रगति के बारे में पूछ सके। सर्वर जेएसओएन और क्लाइंट साइड स्क्रिप्ट का आंकड़ा देता है कि वह इसके साथ क्या करना चाहता है।

  2. कॉमेट - मैं इस से परिचित नहीं हूं, लेकिन पारंपरिक AJAX क्लाइंट द्वारा अलग से अनुरोध भेजने के लिए काम करता है। इसे 'पुल' संचार के रूप में जाना जाता है। सीओएमईटी में, यह धक्का है। सर्वर क्लाइंट को इसकी प्रगति के बारे में डेटा वापस धक्का देता है, भले ही सर्वर ने इसके लिए नहीं पूछा था। यह मतदान की तुलना में सर्वर पर कम तनाव के साथ एक स्थिति बनाता है। Google COMET with Django का उपयोग करने वाले लोगों के लिए कुछ परिणाम बदलता है।

  3. रिवर्स AJAX - कॉमेट के समान। Reverse Ajax with Django

(मैं क्षमा याचना, मैं कम से कम पता है पिछले 2 के बारे में है, लेकिन मैं आप कम से कम पता है की वे मौजूद चाहें लगा)

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