पिछले 15 हफ्तों से,
हम सक्रिय रूप से
स्टिलिन परियोजना पर काम कर रहे हैं, जो कि हमारी पहली मुख्यधारा की परियोजना है जो कि
जोंगो में लिखी गई है। एक दिलचस्प अनुभव प्राप्त हुआ जिसे हम समुदाय के साथ साझा करना चाहेंगे।
लेख मुख्य रूप से Django के नए लोगों के लिए दिलचस्प होगा।
Django मॉड्यूल
दक्षिण योजना और डेटा के लिए एक डेटाबेस django के लिए एक डेटाबेस, कुछ ऐसा है जिसके बिना संयुक्त विकास के बिना जीना असंभव है। दुर्भाग्य से, परियोजना डेटाबेस स्कीमा में परिवर्तनों को ट्रैक करने के लिए Dzhang में कोई नियमित माइग्रेशन तंत्र नहीं है। इस अंतर को भरने के लिए, हमने दक्षिण का उपयोग किया, जो कि अच्छा साबित हुआ, मुख्य बात यह है कि यह कैसे काम करता है, यह जानने के लिए कि सब कुछ पूरी तरह
से प्रलेखन में वर्णित
है । रेक: माइग्रेशन को जुड़नार के बिना रोल किया जा सकता है, इसका उपयोग किया जाना चाहिए। डेटा माइग्रेशन को हाथ से लिखा जाना चाहिए। यदि आप असामान्य फ़ील्ड (उदाहरण के लिए, WYSIWYG फ़ील्ड) का उपयोग करते हैं और फिर उन्हें छोड़ देते हैं, तो पुराने माइग्रेशन काम नहीं करेंगे (लेकिन उन्हें मैन्युअल रूप से फिर से लिखा जा सकता है)।
Django मॉडल के लिए नेस्टेड सेट का कार्यान्वयन। उपयुक्त क्षेत्रों, साथ ही पेड़ के साथ काम करने के तरीकों को जोड़ता है। एक संबंधपरक डीबीएमएस में पदानुक्रमित संरचनाओं को लागू करने के लिए एक अनिवार्य चीज। व्यवस्थापक पैनल में पेड़ों का प्रतिनिधित्व करने के लिए fein-cms का इस्तेमाल किया।
उपयोगी उपयोगिताओं का एक सेट जैसे कि view_to और ajax_request सज्जाकार या HttpResponseReload। कोड लालित्य को बढ़ाने के लिए अनुशंसित।
एक मॉड्यूल जो डिबगिंग जानकारी के साथ एक पैनल प्रदर्शित करता है। हम मुख्य रूप से SQL क्वेरी लॉग में रुचि रखते थे, जिसे क्वेरी, समय आदि के स्रोत के बारे में जानकारी द्वारा पूरक किया जाता है।
Django के साथ आकृति विज्ञान विश्लेषक पूर्णांक। सामान्य रूप में संग्रहीत शब्दों को घोषित करने के लिए उपयोग किया जाता है (अर्थात, यह हमें एक शब्द के विभिन्न रूपों को संग्रहीत करने से बचाता है)। वह यह भी जानता है कि बहुवचन में शब्दों को कैसे रखा जाए:
morph.pluralize_inflected_ru(u'', 38) >>>
नुकसान - धीमे साइक्लाइट को बैकेंड के रूप में (शेल्व, सीडीबी और टोक्यो कैबिनेट के लिए तेजी से विकल्प हैं, लेकिन हम उनकी तरह नहीं हैं), सभी शब्द सही तरीके से संसाधित नहीं होते हैं, लेकिन यह दुर्लभ है।
"मार्च 18, 2011" से पीड़ित नहीं होने के लिए हम रूसी तारीखों के साथ काम करने के लिए पाइटल का उपयोग करते हैं। मॉड्यूल, वैसे, रूसी पाठ का अनुवाद कर सकता है और संख्या के आधार पर सही मामले का चयन कर सकता है, साथ ही pymorphy (हालांकि एक शब्दकोश के बिना, आपको टेम्पलेट में 3 शब्द रूपों को संग्रहीत करना होगा)।
स्वचालित रूप से छवियों के थंबनेल बनाने के लिए आवेदन। यह कुंजी-मूल्य भंडारण के आधार पर काम करता है (ज़ाहिर है, बॉक्स से उपलब्ध
रेडिस का उपयोग
बैकएंड के रूप में किया जाता है)। बैकएंड स्वयं थंबनेल को संग्रहीत नहीं करता है (वे फ़ाइलों में संग्रहीत हैं), लेकिन केवल मेटा-जानकारी (
मॉड्यूल का एक
योजनाबद्ध आरेख )।
{% thumbnail image "100x100" crop="top" as im %} <img src="{{ im.url }}"> {% endthumbnail %}
सीएसएस और जेएस के ग्लूइंग और मिनिफिकेशन। कॉन्फ़िगरेशन में, ग्लूइंग के लिए फ़ाइलों के सेट संग्रहीत किए जाते हैं, टेम्पलेट में विधानसभा का नाम निर्दिष्ट होता है और संपीड़ित एक छोटा संस्करण (YUI और CSSMin फ़िल्टर) उत्पन्न करता है। आप अपने फ़िल्टर के साथ कार्यक्षमता का विस्तार कर सकते हैं। यह एक संस्करणबद्ध फ़ाइल नाम का समर्थन करता है, जो कि आने वाले लंबे समय के लिए एक्सपायर हेडर सेट करते समय बहुत सुविधाजनक होता है (मैनेजमेड सिंकपॉपर उत्पादन के समय रखी गई फ़ाइलों के नाम और सामग्री को अपडेट करेगा)
DISQUS के रचनाकारों का एक बहुत ही उपयोगी अनुप्रयोग, जो आपको डेटाबेस में आसानी से त्रुटियों को लॉग करने की अनुमति देता है। संतरी अपवादों को पकड़ता है (उदाहरण के लिए, Http404), उन्हें बचाता है और एक सुंदर इंटरफ़ेस प्रदान करता है जो त्रुटि की आवृत्ति (रेखांकन सहित) दिखाता है। कई सर्वरों से त्रुटियों को एकत्र करना संभव है।
हैबे पर संतरी की समीक्षाएप्लिकेशन एडमिन डैशबोर्ड को उपयोगी बनाने में मदद करता है। विगेट्स का एक अंतर्निहित सेट है, लेकिन इसे स्वयं लिखना मुश्किल नहीं होगा। आप अपने कार्यों के लिए एक मेनू भी बना सकते हैं, जो व्यवस्थापक पैनल के सभी पृष्ठों पर उपलब्ध होगा।
हैबर पर व्यवस्थापक टूल की समीक्षाटिप्पणियाँ
जब हमने टिप्पणियां कीं, तो हमने तय किया कि थर्ड-पार्टी सर्विसेज (VKontakte, Facebook, Openid, और उनके जैसे अन्य) के माध्यम से प्राधिकरण सबसे अच्छा विकल्प होगा। यह उपयोगकर्ता के लिए बहुत सुविधाजनक है, क्योंकि उसे विभिन्न संसाधनों से बहुत सारे पासवर्ड का आविष्कार करने और याद रखने की आवश्यकता नहीं है। इसे जल्दी और सरलता से करने के लिए, एक
लॉगिन सेवा है। हमें वास्तव में इंटरफ़ेस पसंद नहीं आया और हमने अपने दम पर मुख्य सेवाओं के साथ एकीकरण लागू किया।
पब्लिकाउथ मॉड्यूल को एक
आधार के रूप में लिया गया था, लेकिन इसे पूरी तरह से समाप्त करना था। मामला mail.ru और अन्य रूसी सेवाओं के साथ एकीकरण को जोड़ने तक सीमित नहीं था। हमने "सही" ओपनआईडी प्रदाता हस्ताक्षर सत्यापन को जोड़ा और एक काफी अनुकूल दो-क्लिक विजेट बनाया।
उत्पादकता अनुकूलन
व्यवहार में, django की कमजोरियों में से एक ORM थी। सभी ओआरएम की तरह, यह बड़ी संख्या में अनुरोधों को जन्म देता है और डेटा को पुनः प्राप्त करने पर बहुत अधिक मेमोरी खपत करता है। कैशिंग के बिना,
मुख्य पृष्ठ उत्पन्न करने में कुछ सेकंड लगते थे। संभावित अनुकूलन रणनीतियों में से, कैशिंग सबसे सस्ता और सबसे प्रभावी निकला, क्योंकि डेटाबेस स्कीमा ने नियमित उपकरणों के उपयोग की अनुमति नहीं दी, जैसे कि select_related।
कैशिंग
टाइम आउट द्वारा ब्लॉक कैशिंग, "बॉक्स से बाहर" उपलब्ध, हमें शोभा नहीं देता, क्योंकि यह कैश फ्लश करने के लिए एक सुविधाजनक तरीका प्रदान नहीं करता था। इसलिए, निम्नलिखित रणनीति को चुना गया: कैश अनिश्चित काल तक रहता है (TIMEOUT = 0), और कैश में लेखन कुंजी के कुछ हिस्सों में से एक मुख्य वस्तु के अंतिम अद्यतन की तारीख है। आश्रित वस्तुएं post_save संकेतों का उपयोग करके कोर को अपडेट करती हैं। इस प्रकार, ऑब्जेक्ट बदलते समय, कैशिंग के लिए कुंजी का नाम स्वचालित रूप से बदल जाता है, जो आपको साइट पर सबसे वर्तमान डेटा देखने की अनुमति देता है। Redis का उपयोग कैश-बैक के रूप में allkeys-lru एक्सट्रूज़न एल्गोरिथ्म के साथ किया जाता है (कैश कुंजियाँ जिनका उपयोग लंबे समय तक नहीं किया गया है, जब अधिकतम सीमा समाप्त हो जाती है) हटा दिया जाएगा। वैसे, मूली में हम डेटाबेस को थोड़ा और अधिक उतारने के लिए उपयोगकर्ता सत्रों को संग्रहीत करते हैं।
रैंड द्वारा आदेश ()
डेटाबेस को .order_by ('?') के माध्यम से यादृच्छिक मानों के चयन के साथ लोड नहीं करने के लिए, निम्नलिखित दृष्टिकोण का उपयोग किया जाता है: जिस डेटा को मिश्रित करने की आवश्यकता होती है, उसे पुनर्प्राप्त और कैश किया जाता है (विशेषकर यदि इस डेटा को प्राप्त करने के लिए तर्क थकाऊ नहीं है और बड़ी संख्या में प्रश्नों की आवश्यकता होती है)। पहचानकर्ताओं की सूची, और जब यादृच्छिक जारी किए जाते हैं। शफल () को इस सूची में लागू किया जाता है।
सारांश: कैश बुद्धिमानी से :-))
निष्कर्ष में
Django एक बहुत अच्छा परिवर्धन के साथ एक महान ढांचा है; जब आप इसका उपयोग करते हैं, तो आप समझते हैं कि यह हमारी सुविधा के लिए बनाया गया था। एक अच्छा कोडिंग है!
पुनश्च। क्या आपके पास परिचित टाइपसेटर्स / फ्रंट-एंड डेवलपर्स हैं जो काम की तलाश कर रहे हैं (कार्यालय, मॉस्को में स्थायी)?