2009-12-02 15 views
9

Django में, सेटिंग्स को एक फ़ाइल में संग्रहीत किया जाता है, settings.py। यह फ़ाइल कोड का हिस्सा है, और भंडार में जाती है। यह केवल वे डेवलपर हैं जो इस फ़ाइल से निपटते हैं। व्यवस्थापक मॉडलों, डेटाबेस में डेटा के साथ सौदा करता है। यह वह डेटा है जो गैर-विकास कर्मचारी संपादित करते हैं, और साइट विज़िटर टेम्पलेट्स में प्रस्तुत किए जाते हैं।कुछ Django सेटिंग्स को कर्मचारियों द्वारा कैसे पहुंचाया जा सकता है?

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

मैंने this dbsettings app पर ध्यान दिया, लेकिन यह पुराना और अनजान है। मैंने यह भी देखा कि django ई-कॉमर्स ऐप, सैचमो में, इस dbsettings ऐप का उपयोग-केस विशिष्ट कांटा शामिल है। हम अपनी साइट में कुछ ऐसा ही बना सकते हैं, एक ऐप जो कुछ सेटिंग्स को एक डेटाबेस डेटाबेस में कुंजी/वैल्यू जोड़े के रूप में संग्रहीत करता है, लेकिन यह वास्तव में गलत दृष्टिकोण की तरह लगता है। डीबी में कुछ क्यों डाला गया है जो गैर-डेवलपर्स द्वारा इसे अधिक आसानी से संपादन योग्य बनाने के लिए नहीं है?

हमारे पास हमारी Django साइट पर साइट-व्यापी सेटिंग्स की एक सूची है जिसे हम गैर-डेवलपर प्रशासकों द्वारा संपादन योग्य बनाना चाहते हैं। इस बारे में जाने का सबसे अच्छा तरीका क्या है?

+0

+1 क्योंकि यह जानकर वीसीएस में डीजेगो परियोजनाओं को प्रबंधित करना आसान हो सकता है। डेवलपर्स को सावधान रहना होगा कि अन्यथा सेटिंग्स में स्थानीय बदलाव न करें। –

+0

कैशिंग इसे कम कर देगा (जब स्थानीय सेटिंग्स डेटाबेस में डाल दी जाती हैं) django प्रक्रिया के प्रति उदाहरण केवल एक क्वेरी के लिए। सेटिंग्स को पुनः लोड करने के लिए सर्वर को पुनरारंभ करने के लिए – Evgeny

+0

आप बस "touch site.wsgi" फ़ाइल को कॉल कर सकते हैं, उदा। एक क्रॉन नौकरी के साथ, लेकिन यह केवल तभी काम करेगा जब आपकी wsgi प्रक्रिया डेमॉन मोड – Evgeny

उत्तर

6

कुछ dbsettings जैसा कि आपने बताया) जैसा कि जाने का तरीका लगता है। कि इस परियोजना के लिए reasons for existence से:

नहीं सभी सेटिंग्स, settings.py में हैं के रूप में यह कुछ विशेष सीमाएँ हैं:

  • सेटिंग्स परियोजना चौड़ा कर रहे हैं। यह न केवल settings.py को अव्यवस्थित करने की आवश्यकता है, बल्कि विवादों के नामकरण की संभावनाओं को भी बढ़ाता है।

  • सेटिंग्स Django के एक उदाहरण में निरंतर हैं। वे नहीं हो सकते हैं, एप्लिकेशन को पुनरारंभ किए बिना बदला जा सकता है।

  • सेटिंग्स को बदलने के लिए प्रोग्रामर की आवश्यकता होती है। यह सेटिंग भी है यदि सेटिंग किसी और चीज़ पर कोई कार्यात्मक प्रभाव नहीं डालती है।

dbsettings आप के लिए काम नहीं करता है, तो अपने स्वयं के लागू है, या यह कांटा। ऐसा प्रतीत नहीं होता है कि यह बहुत कठिन होगा।

0

कैसे एक sitesettings.py कहीं डाल (या जो भी) के बारे में अपने व्यवस्थापक उपयोग कर सकते हैं कि, तो settings.py में क्या

from sitesettings import * 

यह अच्छा और सरल लगता है, लेकिन मैं गलत समझा या अपनी समस्या oversimplified हो सकता है :)

+1

यह समाधान भी काम नहीं करता है क्योंकि केवल तकनीक लोग सर्वर पर फ़ाइलों को संपादित कर सकते हैं और/या अपाचे को पुनरारंभ कर सकते हैं। – Apreche

6

मैं वास्तव में dbsettings, का बड़ा प्रशंसक हूं और मेरा कांटा प्रकाशित करने का अर्थ रखता हूं जो इसे Django 1.1 (वास्तव में एक बड़ा परिवर्तन नहीं) के साथ काम करने के लिए पैच करता है। ऐसा लगता है कि किसी के पास updated it already है।

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

CONSTANT1: MyValue 
CONSTANT2: Anothervalue 

आप इस कहीं डाल दिया संपादकों यह है, तो settings.py के अंत में आप सिर्फ कर पहुँच सकते हैं:

import yaml 
try: 
    globals().update(yaml.load(open('/path/to/my/yaml/file.yml'))) 
except: 
    pass 

आपको YML फ़ाइल को पार्स करने के लिए Python YAML लाइब्रेरी की आवश्यकता होगी।

इस दृष्टिकोण का नकारात्मक पक्ष यह है कि आपको परिवर्तन लेने के लिए अपाचे को पुनरारंभ करना होगा।

जोड़ने के लिए संपादित किया गया यह एक अंतराल बनाने के लिए विशेष रूप से कठिन नहीं होगा जो इस फ़ाइल को संपादित कर सकता है, और एक बटन प्रदान करता है जो अपाचे को पुनरारंभ करने के लिए स्क्रिप्ट चलाता है।

+0

यह समाधान काम नहीं करता है क्योंकि केवल तकनीक लोग सर्वर पर फ़ाइलों को संपादित कर सकते हैं और/या अपाचे को पुनरारंभ कर सकते हैं। – Apreche

+0

सामने वाले अंत का निर्माण करना विशेष रूप से कठिन नहीं होगा जो इस फ़ाइल को संपादित कर सकता है, और एक बटन प्रदान करता है जो अपाचे को पुनरारंभ करने के लिए स्क्रिप्ट चलाता है। –

+1

@ डैनियल - हालांकि उस बिंदु पर आप उसी प्रकार के कार्य-स्तर में शामिल हो रहे हैं जो dbsettings की आवश्यकता है। –

1

यदि आपको सर्वर को पुनरारंभ करने से बचना चाहिए तो सेटिंग के लिए एक लॉजिकल स्थान डोमिनिक और डैनियल के रूप में डेटाबेस है, लेकिन आपको अद्यतन होने पर कैश सेटिंग्स ऑब्जेक्ट को अमान्य करने की आवश्यकता होगी।

ऐसा लगता है कि डीजेगो के low level cache API के साथ कैश में मूल्यों को दोबारा सेट करना संभव है। आप जो भी चाहते हैं, इन कॉलों के साथ प्राप्त किया जाना चाहिए:

cache.set('settings', local_settings) 
cache.add('settings', local_settings) 
local_settings = cache.get('settings') 
cache.delete('settings') 
संबंधित मुद्दे

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