विषय पर बढ़ें

कॉन्फ़िगरेशन

te बारह पैटर्न के अनुसार कॉन्फ़िगरेशन और कोड के एक सख्त पृथक्करण गुणक, घटक, उपादान, कारक, खंड, गुणनखंड (संज्ञा) प्रोत्साहित करता है।

कॉन्फ़िगरेशन को पर्यावरण चर में संग्रहीत किया जाना चाहिए या स्रोत नियंत्रण के लिए प्रतिबद्ध नहीं होना चाहिए .env फ़ाइल में।

स्क्वैल्केमी आयात से create_engine
te.से आयात
te.config से कॉन्फ़िग आयात करें
te.aसे आयात CommaSeparatedStrings गुप्त

#Config को पर्यावरण चर और / या "env" फ़ाइलों से पढ़ा जाएगा।
कॉन्फ़िग = कॉन्फ़िग (".env")

DEBUG = कॉन्फ़िग ('DEBUG', कास्ट = बूल, डिफ़ॉल्ट = गलत)
DATABASE_URL = कॉन्फ़िग ('DATABASE_URL')
SET _ KEY = कॉन्फ़िग ('SECRET _ KEY', कास्ट = सीक्रेट)
ALLOWED_HOSTS = कॉन्फ़िग cast=CommaSeparatedStrings

ऐप = स्टारलेट (debug = DEBUG)
इंजन = create_engine (DATABASE_URL)
...


# स्रोत नियंत्रण के लिए इसे प्रतिबद्ध न करें।
#Eg। शामिल करें। अपने`.gitignore` फ़ाइल में "env"।
DEBUG = सच
DATABASE_URL = postgresql: // उपयोगकर्ता: password@localhost 5432 / डेटाबेस
KEY=43n080musdfjt54t-09sdgr
ALLOWED_HOSTS = 127.0.0.1 localhost

प्राथमिकता कॉन्फ़िगर करें

कॉन्फ़िगरेशन मान का रीड क्रमबद्ध करना है:

  • पर्यावरण चर से।
  • से .env फ़ाइल।
  • मौजूद है config में दिया गया डिफ़ॉल्ट मूल्य।

अगर इनमें से कोई भी मैच नहीं करता है, तो config(...) एक त्रुटि उठाई जाएगी।

गुप्त

संवेदनशील कुंजी के लिए, Secret कक्षाएं उपयोगी हैं क्योंकि वे उन स्थितियों को कम करने में मदद करते हैं जिनमें वे मूल्य रखते हैं जो बैकट्रैकिंग या अन्य कोड आत्मनिरीक्षण में लीक हो सकते हैं।

प्राप्त करने के लिए Secret उदाहरण का मूल्य, जिसे स्पष्ट रूप से एक स्ट्रिंग में परिवर्तित किया जाना चाहिए। आपको केवल यह करना चाहिए जहां मान का उपयोग किया जाता है।

>>> से सेटिंग्स आयात करें
>>> सेटिंग.SECRET_KEY
गुप्त ('**********')
>>> str (settings.SECRET_KEY)
'98N349 $% 8b8-7yjn0n8yT $ 23r'

!!! संकेत

आप उपयोग कर सकते हैं `DatabaseURL` से `databases`
पैकेजिंग [यहाँ](https://github.com/encode/databases/blob/ab5eb718a78a27afe18775754e9c0fa2ad9cd211/databases/core.py#L420)
डेटाबेस URL स्टोर करने के लिए और उन्हें लॉग में लीक करने से बचें।

कोमा अलग स्ट्रिंग

CommaSeparatedStrings प्रकार एकल कॉन्फ़िगरेशन कुंजी में कई सामग्री रखने के लिए उपयोगी है।

>>> से सेटिंग्स आयात करें
>>> प्रिंट (सेटिंग.ALLOWED_HOSTS)
CommaSeparatedStrings 127.0.0.1 localhost
>>> प्रिंट (सूची (सेटिंग्स ALLOWED _ HOSTS))
127.0.0.1 localhost
>>> प्रिंट (लेन (सेटिंग.ALLOWED_HOSTS))
2
>>> प्रिंट (सेटिंग.ALLOWED_HOSTS [0])
'127.0.0.1'

पर्यावरण को पढ़ें या संशोधित करें

कुछ मामलों में, आप पर्यावरण चर को प्रोग्रामेटिक रूप से पढ़ना या संशोधित करना चाह सकते हैं। यह परीक्षण में विशेष रूप से उपयोगी है, जहां आप अपने वातावरण में विशिष्ट कुंजियों को ओवरराइड करना चाह सकते हैं।

आपको का उपयोग करना चाहिए environ उदाहरण, बजाय os.environ पढ़ने या लिखने के लिए। यह उदाहरण मानक के लिए मैप करता है os.environ यदि आप कॉन्फ़िगरेशन को पढ़ने के बाद किसी भी वातावरण चर को सेट करते हैं, तो उदाहरण आपको एक त्रुटि फेंककर अतिरिक्त सुरक्षा प्रदान करता है।

यदि आप उपयोग कर रहे हैं pytest , तो आप कर सकते हैं tests/conftest.py कोई भी प्रारंभिक वातावरण सेट करें।

te.config आयात पर्यावरण से

एनवायरन ['DEBUG'] = 'TRUE'

पूर्वनिर्धारित पर्यावरण चर पढ़ें

आप सेटिंग्स के माध्यम से जा सकते हैं। env_prefix पर्यावरण चर को नामस्थान करने के लिए पैरामीटर।

आयात ओएस

te.config से कॉन्फ़िग आयात करें

.enon ['APP_DEBUG'] = 'हाँ'
.enon ['ENVIRONMENT'] = 'देव'

कॉन्फ़िग = कॉन्फ़िग (env_prefix = 'APP_')

DEBUG = कॉन्फ़िग ('DEBUG') #lookups APP_DEBUG, "हाँ" लौटाता है
ENVIRON= config ('ENVIRONMENT') #lookups APP_ENVIRONMENT, उठाता है क्योंकि चर परिभाषित नहीं है

एक पूरा उदाहरण

बड़े अनुप्रयोगों का निर्माण जटिल हो सकता है। आपको कॉन्फ़िगरेशन और कोड को ठीक से अलग करने, परीक्षण के दौरान डेटाबेस को अलग करने, अलग-अलग परीक्षण और उत्पादन डेटाबेस का उपयोग करने की आवश्यकता है, और इसी तरह।

यहां, हम एक पूर्ण उदाहरण देखेंगे जो दिखाता है कि हम एक एप्लिकेशन का निर्माण कैसे शुरू कर सकते हैं।

सबसे पहले, आइए हमारे सेटअप, हमारे डेटाबेस और तालिका परिभाषा और हमारे एप्लिकेशन तर्क को अलग करें:

te.config से कॉन्फ़िग आयात करें
te.aसे गुप्त आयात

कॉन्फ़िग = कॉन्फ़िग (".env")

DEBUG = कॉन्फ़िग ('DEBUG', कास्ट = बूल, डिफ़ॉल्ट = गलत)
SET _ KEY = कॉन्फ़िग ('SECRET _ KEY', कास्ट = सीक्रेट)

DATABASE_URL = कॉन्फ़िग ('DATABASE_URL')


आयात sqlalchआयात करें

# डेटाबेस तालिका परिभाषाएं।
मेटाडेटा = वर्गधर्मी। मेटाडेटा ()

संगठन = वर्गधर्मी। तालिका (
    ...
)


te.से आयात
te.leसे मिडलवेयर आयात
से te.le.सत्र Sleleआयात करते हैं
स्टारलेट से। रूटिंग आयात मार्ग

आयात सेटिंग्स से


Ac def मुखपृष्ठ (अनुरोध):
    ...

मार्ग = [
    मार्ग ("/", समापन बिंदु = मुखपृष्ठ)
]

मिडलवेयर = [
    मिडलवेयर (
        SMidleware,
        secret_key = सेटिंग.SECRET_KEY,
    )
]

ऐप = स्टारलेट (debug = सेटिंग्स। DEBUG, मार्ग = मार्ग, middleware=middleware

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

te.config आयात पर्यावरण से
से te.आयात Testent
स्क्वैल्केमी आयात से create_engine
sqlalchemy_utils आयात से _ डेटाबेस, डेटाबेस _ मौजूद है, ड्रॉप _ डेटाबेस

# यह लाइन एक त्रुटि बढ़ाएगी यदि हम इसका उपयोग 'सेटिंग्स' आयात किए जाने के बाद करते हैं।
एनवायरन ['DEBUG'] = 'TRUE'

आयात सेटिंग्स से
myproject.app से ऐप आयात करें
से .मेटाडेटा आयात करते हैं


@ .(autouse = True, गुंजाइश = "सत्र")
Dसेटअप _ परीक्षण _ डेटाबेस ():
    """
    हर बार परीक्षण चलने पर एक साफ परीक्षण डेटाबेस बनाएं।
    """
    url = सेटिंग.DATABASE_URL
    इंजन = create_engine (url)
    डेटाबेस _ मौजूद नहीं है (url), 'परीक्षण डेटाबेस पहले से मौजूद है। परीक्षण छोड़ना।'
    _ डेटाबेस बनाएं (url) # परीक्षण डेटाबेस बनाएं।
    मेटाडेटा। create_all (engine) # टेबल बनाएं।
    उपज # परीक्षण चलाएं।
    ड्रॉप _ डेटाबेस (url) # परीक्षण डेटाबेस ड्रॉप करें।


@ py.()
डिफ क्लाइंट ():
    """
    मामलों का परीक्षण करने के लिए एक 'क्लाइंट' स्थिरता उपलब्ध कराएं।
    """
    # हमारी स्थिरता एक संदर्भ प्रबंधक के भीतर बनाई गई है। यह सुनिश्चित करता है कि
    # आवेदन जीवनकाल हर परीक्षण मामले के लिए चलता है।
    Testent (app) के साथ test_client के रूप में:
        उपज परीक्षण _ ग्राहक