मुझे कुछ समय पहले ऐसा ही कुछ करने की आवश्यकता थी, और निम्नलिखित वर्णन करता है कि हम क्या करते हैं।
हमारे पास दो टेबल हैं, आइटम और अनफिनिश्ड इट। जब उपयोगकर्ता विज़ार्ड के साथ डेटा को भरता है, तो डेटा अनफिनिश्ड इट टेबल में संग्रहीत होता है। प्रत्येक विज़ार्ड चरण में, सर्वर उस चरण के दौरान दर्ज किए गए डेटा को सत्यापित करता है। जब उपयोगकर्ता विज़ार्ड के साथ समाप्त हो जाता है, तो विज़ार्ड एक पुष्टिकरण पृष्ठ में एक छिपे हुए / रीड-ओनली फॉर्म को प्रस्तुत करता है जो सभी डेटा को प्रस्तुत करता है। उपयोगकर्ता इस पृष्ठ की समीक्षा कर सकता है और त्रुटियों को ठीक करने के लिए प्रासंगिक चरण पर वापस जा सकता है। एक बार जब उपयोगकर्ता अपनी प्रविष्टियों से संतुष्ट हो जाते हैं, तो उपयोगकर्ता सबमिट पर क्लिक करता है और विज़ार्ड तब छिपे हुए / पढ़े गए सभी डेटा को API सर्वर पर केवल फ़ील्ड के रूप में सबमिट करता है। जब API सर्वर इस अनुरोध को संसाधित करता है, तो यह विज़ार्ड के प्रत्येक चरण के दौरान किए गए सभी सत्यापनों को पुन: चलाता है, और अतिरिक्त सत्यापन करता है जो व्यक्तिगत चरणों (जैसे वैश्विक सत्यापन, महंगी सत्यापन) में फिट नहीं होता है।
दो तालिका दृष्टिकोण के लाभ:
डेटाबेस में, आप अनफिनिश्ड इटेम टेबल की तुलना में आइटम टेबल पर तंग बाधाएं रख सकते हैं; आपके पास वैकल्पिक कॉलम होने की आवश्यकता नहीं है जो कि विज़ार्ड समाप्त होने पर वास्तव में आवश्यक होंगे।
रिपोर्टिंग के लिए तैयार किए गए आइटमों के बारे में अलग-अलग क्वेरी करना आसान है क्योंकि आपको अधूरापन के बारे में याद नहीं रखना है। हमारे मामले में, हमें आइटम और अनफिनिश्ड इट्स के बीच समग्र प्रश्न करने की आवश्यकता नहीं है, इसलिए यह कोई समस्या नहीं है।
हानि:
- यह सत्यापन तर्क के दोहराव का खतरा है। वेब फ्रेमवर्क, जिसका हमने उपयोग किया था, Django, इसे थोड़ा और अधिक सारगर्भित बनाता है क्योंकि हमने कुछ सामानों को बदलने के लिए मेटा मैजिक के साथ मॉडल विरासत का उपयोग किया था ताकि हमें आइटम और अनफिनिश्ड इट में अलग होने की आवश्यकता हो। Django अधिकांश डेटाबेस बनाता है और मॉडल से सत्यापन बनाता है, और हमें केवल इसके ऊपर कुछ अतिरिक्त सत्यापन में हैक करने की आवश्यकता है।
अन्य संभावनाओं पर मैंने विचार किया है और हम उनके साथ क्यों नहीं गए:
- कुकीज़ या लोकल स्टोरेज में डेटा की बचत: उपयोगकर्ता किसी अन्य डिवाइस से अपना सबमिशन जारी नहीं रख सकते हैं या यदि वे अपना ब्राउज़र इतिहास हटाते हैं
- डेटाबेस या द्वितीयक डेटास्टोर पर अधूरे डेटा (जैसे JSON) के रूप में अनफिनिश्ड इट को संग्रहीत करें: मुझे पार्सिंग तर्क को परिभाषित करना होगा और Django के स्वचालित मॉडल / फ़ॉर्म सत्यापन का उपयोग नहीं कर सकते।
- ग्राहक पक्ष पर प्रति चरण सत्यापन करें: मुझे पायथन / Django और जावास्क्रिप्ट के बीच सत्यापन तर्क की नकल करनी होगी।