2010-07-11 10 views
9

मुझे पता है कि मैं इसे "अपने पायथन पथ में कहीं भी स्टोर कर सकता हूं" और सब कुछ, लेकिन मेरे प्रोजेक्ट के लिए मिडलवेयर कक्षाओं को स्टोर करने के लिए मैं एक संगठित पैटर्न क्या उपयोग कर सकता हूं?Django: प्रोजेक्ट-विशिष्ट मिडलवेयर स्टोर करने के लिए सबसे आदर्श स्थान क्या है?

मैं mod_wsgi के माध्यम से sys पथ के लिए अपने प्रोजेक्ट रूट निर्देशिका और परियोजना निर्देशिका जोड़कर हूँ:

sys.path.append('/srv/') 
sys.path.append('/srv/workarounds/') 

बाद लाइन परियोजना जड़ जा रहा है। उदाहरण के तौर पर, मान लीजिए कि मैं इस मिडलवेयर क्लास को लागू करना चाहता हूं: http://djangosnippets.org/snippets/1179/

क्या मैं सिर्फ स्निपेट सामग्री को midware.py फ़ाइल में कॉपी करूंगा और इसे अपने प्रोजेक्ट रूट में डंप करूँगा? मिडलवेयर के लिए निर्देशिका बनाएं, उस निर्देशिका को मेरे पायथन पथ में जोड़ें?

उत्तर

5

एक Django साइट के लिए मेरे सामान्य लेआउट है:

projects/ 
templates/ 
common/ 
local/ 

कहाँ:

  • परियोजनाओं आप साइट्स पर शेयर कर सकते हैं, या कर रहे हैं अपने मुख्य परियोजना और किसी भी अन्य
  • आम बातें शामिल हों कम से कम प्रोजेक्ट-विशिष्ट नहीं, जैसे कि आपको सीधे पाइथन/साइट-पैकेज
  • में रखने के बजाय django-profile और django-पंजीकरण डाउनलोड करने की आवश्यकता है टेम्पलेट्स में केवल
  • स्थानीय में ऐसी चीजें हैं जो वर्तमान मशीन के लिए विशिष्ट होने जा रही हैं, ताकि आप डेटाबेस स्थान और पासवर्ड जैसे डेटा को सही तरीके से अलग कर सकें - फिर मैं मशीन-विशिष्ट संस्करणों को सॉफ्ट-लिंक करता हूं (कहें "मशीन 1 -localconfig.py ") स्थानीय/localconfig.py के लिए और फिर कर सकते हैं" आयात localconfig "settings.py में

मैं आम तौर पर डाल मिडलवेयर कि इस परियोजना के लिए विशेष आम में नहीं है परियोजना विशिष्ट एक परियोजना के अंदर है, और मिडलवेयर कि/मिडलवेयर/

सेटिंग में सही जगह पर टेम्पलेट निर्देशिका को जोड़ना सुनिश्चित करें (या शायद, स्थानीय कॉन्फ़िगर करें और फिर इसे सेटिंग्स में आयात करें), और मा केएसई परियोजनाओं, सामान्य, और स्थानीय निर्देशिकाओं को अपने PYTHONPATH में जोड़ना सुनिश्चित करें।

4

यदि आपके पास केवल कुछ कड़े युग्मित मिडलवेयर वर्ग हैं, तो उन्हें ऐप रूट के नीचे middleware.py मॉड्यूल में डाल दिया गया है। (इस प्रकार django.contrib ऐप्स इसे करते हैं - सत्र 'ऐप मिडलवेयर here देखें)।

यदि आपके पास कई अलग-अलग मिडलवेयर कक्षाएं हैं, तो संबंधित मिडलवेयर कक्षाओं के submodules के साथ एक midware pacakge बनाएँ। यद्यपि यदि आप इस स्थिति में समाप्त होते हैं, तो इस बात पर विचार करें कि आप अपने प्रोजेक्ट को कई मिनी-ऐप में कैसे दोबारा कर सकते हैं, जो सभी एक विशिष्ट आवश्यकता को हल करते हैं (और उन्हें ओपन सोर्स :))।

व्यक्तिगत रूप से, मेरे पास एक आम django पैकेज है जहां मैं आम मिडलवेयर डंप करता हूं (जैसे आपकी लिंक LoginRequiredMiddleware कक्षा) middleware पैकेज में। यदि यह आपके प्रोजेक्ट के संदर्भ में समझ में आता है तो मैं अत्यधिक सुझाव देता हूं। यह नकल के मेरे अनगिनत घंटे, और बग फिक्सिंग बचा है। django-common और django-annoying इस तरह के प्रोजेक्ट लेआउट के अच्छे उदाहरण हैं

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