2009-03-27 7 views
9

पायथन के बारे में मेरी पसंदीदा विशेषताओं में से एक यह है कि आप पाइथन में कॉन्फ़िगरेशन फ़ाइलों को लिख सकते हैं जो पढ़ने और समझने के लिए बहुत आसान हैं। यदि आप अपने आप पर कुछ सीमाएं डालते हैं, तो आप बहुत भरोसा कर सकते हैं कि गैर-पायथनिस्टों को पता चलेगा कि आपका क्या मतलब है और यह आपके कार्यक्रम को पुन: कॉन्फ़िगर करने में पूरी तरह से सक्षम होगा।क्या यह कभी भी पाइथन कॉन्फ़िगरेशन फ़ाइल में कोड डालने के लिए विनम्र है?

मेरा सवाल है, वास्तव में ये सीमाएं क्या हैं? मेरा स्वयं का व्यक्तिगत हेरिस्टिक

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

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

try: 
    from settings_overrides import * 
    LOCALIZED = True 
except ImportError: 
    LOCALIZED = False 

जहां settings_overrides अजगर रास्ते पर लेकिन काम के प्रति बाहर है। इस उदाहरण के बारे में, या सामान्य रूप से पाइथन कॉन्फ़िगरेशन सीमाओं के बारे में आप क्या सोचते हैं?

+0

"उनके व्याख्या के तरीके को बदलें" -> "बदलें कि उनका अर्थ कैसे बदला जाता है"। मुझे पता है कि इससे कोई फर्क नहीं पड़ता, लेकिन यह एक पालतू peeve है ... – tgray

+0

धन्यवाद। मुझे बहुत शर्म आती है। –

उत्तर

11

एक Django विकी पृष्ठ है, जो आप जिस चीज से पूछ रहे हैं उसे ठीक करता है। http://code.djangoproject.com/wiki/SplitSettings

पहिया को पुन: पेश न करें। configparser और आईएनआई फ़ाइलों का उपयोग करें। पाइथन फ़ाइलों को किसी के द्वारा तोड़ना आसान होता है, जो पाइथन को नहीं जानता है।

+1

-1: .INI icky और सीमित हैं। –

+0

@ एसएलओटी: वे सही नहीं हैं, लेकिन वे एक मानक हैं जिन्हें किसी भी भाषा में पढ़ा जा सकता है। सीमित? खैर, विन्यास फाइलों में व्यापार तर्क एम्बेडेड नहीं होना चाहिए। विकी पेज से – vartec

+0

+1 लिंक ... मैंने उस पृष्ठ को नहीं देखा था और इसमें कुछ अच्छी चीजें हैं। –

4

आपकी हेरिस्टिक्स अच्छी हैं। नियम बनाए जाते हैं ताकि सीमाएं निर्धारित की जा सकें और केवल तभी टूट जाए जब यह वैकल्पिक रूप से वैकल्पिक रूप से एक बेहतर समाधान है।

फिर भी, मैं यह सोचने में सहायता नहीं कर सकता कि साइट जांच कोड पार्सर में होना चाहिए, और एक अतिरिक्त कॉन्फ़िगरेशन आइटम जोड़ा गया है जो चुनता है कि कौन सा विकल्प लिया जाना चाहिए।

मुझे नहीं लगता कि इस मामले में विकल्प इतना बुरा है कि नियमों को तोड़ने समझ में आता है है है ...

-Adam

4

मुझे लगता है कि यह बनाम खुशी तर्क एक दर्द है।

यह नहीं गलत क्योंकि यह सभी वैध अजगर एक अजगर कॉन्फ़िग फ़ाइल में कोड डालने के लिए है, लेकिन इसका मतलब यह है कि आप किसी उपयोगकर्ता से किसी एप्लिकेशन पुन: कॉन्फ़िगर करने में आता है भ्रमित कर सकता है। यदि आप इसके बारे में चिंतित हैं, तो टिप्पणियों के साथ इसे रस्सी से बताएं कि यह क्या करता है और उपयोगकर्ता को इसे संपादित नहीं करना चाहिए, बल्कि सेटिंग्स_overrides.py फ़ाइल को संपादित करना चाहिए।

आपके उदाहरण के लिए, आवश्यक पर डेवलपर्स के लिए अपने ऐप्स को तैनात करने के लिए आवश्यक है। दर्द से निश्चित रूप से अधिक खुशी।लेकिन क्या आप वास्तव में इस के बजाय करना चाहिए:

LOCALIZED = False 

try: 
    from settings_overrides import * 
except ImportError: 
    pass 

और अपने settings_overrides.py फ़ाइल में:

LOCALIZED = True 

... कुछ भी नहीं है लेकिन यह स्पष्ट है कि फ़ाइल करता है बनाने के लिए .. आप क्या कर रहे हैं वहां दो जगहों पर विभाजित होता है।

1

सामान्य अभ्यास के रूप में, पृष्ठ पर अन्य उत्तरों देखें; यह सब निर्भर करता है।

एक सेटिंग: Django के लिए विशेष रूप से, हालांकि, मैं settings.py फ़ाइल में लेखन कोड के साथ मौलिक रूप से कुछ भी गलत नहीं देख ... सब के बाद, सेटिंग्स फ़ाइल कोड :-)

Django docs on settings themselves कहना है फ़ाइल मॉड्यूल-स्तरीय चर के साथ सिर्फ एक पायथन मॉड्यूल है।

और उदाहरण दे: के रूप में कोड भी एक सुरक्षा जोखिम है

assign settings dynamically using normal Python syntax. For example: 
MY_SETTING = [str(i) for i in range(30)] 
1

सेटिंग्स। आप अपना "कॉन्फ़िगरेशन" आयात करते हैं, लेकिन हकीकत में आप उस फ़ाइल में जो भी कोड डाल रहे हैं उसे निष्पादित कर रहे हैं। उन फ़ाइलों में कॉन्फ़िगर करें जिन्हें आप पहले पार्स करते हैं और आप गैरकानूनी या दुर्भावनापूर्ण मानों को अस्वीकार कर सकते हैं, भले ही यह आपके लिए अधिक काम करे। दिसंबर 2008 में इस बारे में blogged

+0

यह एक अच्छा मुद्दा है। मुझे लगता है कि यह विशेष मामला सुपरसर्स होने वाले सभी संपादकों की श्रेणी में आता है, लेकिन यह अभी भी सामान्य मामले में याद रखने के लिए कुछ है। –

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

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