Django 2.1 - Django settings

Django सेटिंग्स




django

Django सेटिंग्स

एक Django सेटिंग फ़ाइल में आपके Django इंस्टॉलेशन के सभी कॉन्फ़िगरेशन होते हैं। यह दस्तावेज़ बताता है कि सेटिंग्स कैसे काम करती हैं और कौन सी सेटिंग्स उपलब्ध हैं।

मूल बातें

एक सेटिंग फ़ाइल मॉड्यूल स्तर के चर के साथ सिर्फ पायथन मॉड्यूल है।

यहाँ उदाहरण सेटिंग्स के एक जोड़े हैं:

ALLOWED_HOSTS = ['www.example.com']
DEBUG = False
DEFAULT_FROM_EMAIL = '[email protected]'

ध्यान दें

यदि आप DEBUG को False सेट करते हैं, तो आपको ALLOWED_HOSTS सेटिंग को भी ठीक से सेट करना होगा।

क्योंकि एक सेटिंग फ़ाइल एक पायथन मॉड्यूल है, निम्नलिखित आवेदन:

  • यह पायथन सिंटैक्स त्रुटियों के लिए अनुमति नहीं देता है।
  • यह सामान्य पायथन सिंटैक्स का उपयोग करके गतिशील रूप से सेटिंग्स असाइन कर सकता है। उदाहरण के लिए:

    MY_SETTING = [str(i) for i in range(30)]
    
  • यह अन्य सेटिंग्स फ़ाइलों से मूल्यों को आयात कर सकता है।

रूपरेखाएँ तैयार करना

DJANGO_SETTINGS_MODULE

जब आप Django का उपयोग करते हैं, तो आपको यह बताना होगा कि आप किन सेटिंग्स का उपयोग कर रहे हैं। यह एक पर्यावरण चर, DJANGO_SETTINGS_MODULE का उपयोग करके करें।

mysite.settings का मान पाइथन पथ सिंटैक्स में होना चाहिए, जैसे mysite.settings । ध्यान दें कि सेटिंग मॉड्यूल पायथन आयात खोज पथ पर होना चाहिए।

django-admin उपयोगिता

django-admin का उपयोग करते django-admin , आप या तो पर्यावरण चर को एक बार सेट कर सकते हैं, या उपयोगिता के चलने पर हर बार सेटिंग मॉड्यूल में स्पष्ट रूप से पास हो सकते हैं।

उदाहरण (यूनिक्स बैश शेल):

export DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

उदाहरण (विंडोज शेल):

set DJANGO_SETTINGS_MODULE=mysite.settings
django-admin runserver

सेटिंग्स को मैन्युअल रूप से निर्दिष्ट करने के लिए --settings कमांड-लाइन तर्क का उपयोग करें:

django-admin runserver --settings=mysite.settings

सर्वर पर ( mod_wsgi )

आपके लाइव सर्वर वातावरण में, आपको अपने WSGI एप्लिकेशन को यह बताना होगा कि कौन सी सेटिंग फ़ाइल का उपयोग करना है। os.environ साथ os.environ :

import os

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

अधिक जानकारी और एक Django WSGI आवेदन के लिए अन्य सामान्य तत्वों के लिए Django mod_wsgi प्रलेखन पढ़ें।

डिफ़ॉल्ट सेटिंग्स

एक Django सेटिंग्स फ़ाइल को किसी भी सेटिंग को परिभाषित करने की आवश्यकता नहीं है अगर इसे करने की आवश्यकता नहीं है। प्रत्येक सेटिंग में एक समझदार डिफ़ॉल्ट मान होता है। ये चूक मॉड्यूल django/conf/global_settings.py

यहाँ एल्गोरिथ्म Django सेटिंग संकलन में उपयोग करता है:

  • global_settings.py से सेटिंग लोड करें।
  • निर्दिष्ट सेटिंग्स फ़ाइल से लोड सेटिंग्स, आवश्यक के रूप में वैश्विक सेटिंग्स ओवरराइडिंग।

ध्यान दें कि सेटिंग फ़ाइल को global_settings से आयात नहीं करना चाहिए, क्योंकि यह बेमानी है।

यह देखकर कि आपने कौन सी सेटिंग बदली है

यह देखने का एक आसान तरीका है कि आपकी कौन सी सेटिंग डिफ़ॉल्ट सेटिंग्स से विचलित है। python manage.py diffsettings कमांड python manage.py diffsettings कमांड python manage.py diffsettings वर्तमान सेटिंग्स फ़ाइल और Django की डिफ़ॉल्ट सेटिंग्स के बीच अंतर प्रदर्शित करता है।

अधिक के लिए, diffsettings डॉक्यूमेंटेशन देखें।

पायथन कोड में सेटिंग्स का उपयोग करना

अपने Django ऐप्स में, ऑब्जेक्ट django.conf.settings आयात करके सेटिंग्स का उपयोग करें। उदाहरण:

from django.conf import settings

if settings.DEBUG:
    # Do something

ध्यान दें कि django.conf.settings कोई मॉड्यूल नहीं है - यह एक वस्तु है। इसलिए व्यक्तिगत सेटिंग्स आयात करना संभव नहीं है:

from django.conf.settings import DEBUG  # This won't work.

यह भी ध्यान दें कि आपका कोड global_settings या अपनी स्वयं की सेटिंग फ़ाइल से आयात नहीं करना चाहिए। django.conf.settings डिफ़ॉल्ट सेटिंग्स और साइट-विशिष्ट सेटिंग्स की अवधारणाओं को सार करती है; यह एकल इंटरफ़ेस प्रस्तुत करता है। यह उस कोड को भी डिकूप करता है जो आपकी सेटिंग्स के स्थान से सेटिंग्स का उपयोग करता है।

रनटाइम पर सेटिंग बदलना

आपको रनटाइम में अपने अनुप्रयोगों में सेटिंग में बदलाव नहीं करना चाहिए। उदाहरण के लिए, इसे एक दृश्य में न करें:

from django.conf import settings

settings.DEBUG = True   # Don't do this!

सेटिंग में आपको जिस जगह को असाइन करना चाहिए वह एकमात्र सेटिंग फ़ाइल में है।

सुरक्षा

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

उपलब्ध सेटिंग्स

उपलब्ध सेटिंग्स की पूरी सूची के लिए, सेटिंग्स संदर्भ देखें।

अपनी सेटिंग बनाना

अपने स्वयं के Django ऐप्स के लिए आपको अपनी सेटिंग्स बनाने से कुछ भी नहीं रोकना है। बस इन दिशानिर्देशों का पालन करें:

  • नाम सेट करना सभी बड़ा होना चाहिए।
  • पहले से मौजूद सेटिंग को सुदृढ़ न करें।

अनुक्रमों के लिए सेटिंग्स, Django स्वयं सूचियों का उपयोग करता है, लेकिन यह केवल एक सम्मेलन है।

DJANGO_SETTINGS_MODULE को सेट किए बिना सेटिंग्स का उपयोग करना

कुछ मामलों में, आप DJANGO_SETTINGS_MODULE परिवेश चर को बायपास करना चाह सकते हैं। उदाहरण के लिए, यदि आप स्वयं द्वारा टेम्पलेट प्रणाली का उपयोग कर रहे हैं, तो आप संभवतः सेटिंग मॉड्यूल की ओर इशारा करते हुए एक पर्यावरण चर स्थापित करना नहीं चाहते हैं।

इन मामलों में, आप मैन्युअल रूप से Django की सेटिंग्स को कॉन्फ़िगर कर सकते हैं। इसे कॉल करके करें:

django.conf.settings.configure(default_settings, **settings)

उदाहरण:

from django.conf import settings

settings.configure(DEBUG=True)

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

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

नतीजतन, जब settings.configure() माध्यम से कॉन्फ़िगर किया जाता है, तो Django प्रक्रिया पर्यावरण चर में कोई संशोधन नहीं करेगा (सामान्य रूप से ऐसा क्यों होता है इसके लिए TIME_ZONE के प्रलेखन देखें)। यह माना जाता है कि आप इन मामलों में अपने पर्यावरण के पूर्ण नियंत्रण में हैं।

कस्टम डिफ़ॉल्ट सेटिंग्स

यदि आप django.conf.global_settings अलावा कहीं और से आने के लिए डिफ़ॉल्ट मान चाहते हैं, तो आप configure() करने के लिए कॉल में default_settings तर्क (या पहले स्थितीय तर्क के रूप में) के रूप में डिफ़ॉल्ट सेटिंग्स प्रदान करने वाले मॉड्यूल या वर्ग में पास कर सकते हैं configure()

इस उदाहरण में, डिफ़ॉल्ट सेटिंग्स myapp_defaults से ली गई हैं, और DEBUG सेटिंग True सेट है, myapp_defaults में इसके मूल्य की परवाह किए बिना:

from django.conf import settings
from myapp import myapp_defaults

settings.configure(default_settings=myapp_defaults, DEBUG=True)

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

settings.configure(myapp_defaults, DEBUG=True)

आम तौर पर, आपको इस तरह से चूक को ओवरराइड करने की आवश्यकता नहीं होगी। Django चूक पर्याप्त रूप से प्रसिद्धि है कि आप उन्हें सुरक्षित रूप से उपयोग कर सकते हैं। ध्यान रखें कि यदि आप एक नए डिफ़ॉल्ट मॉड्यूल में पास होते हैं, तो यह पूरी तरह से Django चूक को बदल देता है, इसलिए आपको हर संभव सेटिंग के लिए एक मान निर्दिष्ट करना होगा जो उस कोड में उपयोग किया जा सकता है जिसे आप आयात कर रहे हैं। पूरी सूची के लिए django.conf.settings.global_settings में देखें।

या तो configure() या DJANGO_SETTINGS_MODULE आवश्यक है

यदि आप DJANGO_SETTINGS_MODULE परिवेश चर सेट नहीं कर रहे हैं, तो आपको सेटिंग्स को पढ़ने वाले किसी भी कोड का उपयोग करने से पहले किसी बिंदु पर configure() को कॉल करना होगा

यदि आप DJANGO_SETTINGS_MODULE सेट नहीं करते हैं और configure() नहीं करते हैं configure() , Django पहली बार किसी सेटिंग तक पहुँचने के दौरान एक ImportError अपवाद को बढ़ाएगा।

यदि आप DJANGO_SETTINGS_MODULE सेट करते हैं, तो सेटिंग मानों को किसी भी तरह एक्सेस करें, फिर कॉल configure() , Django एक RuntimeError बढ़ाएगा, जो दर्शाता है कि सेटिंग्स पहले ही कॉन्फ़िगर हो चुकी हैं। इस उद्देश्य के लिए एक संपत्ति है:

उदाहरण के लिए:

from django.conf import settings
if not settings.configured:
    settings.configure(myapp_defaults, DEBUG=True)

साथ ही, किसी भी सेटिंग के एक्सेस होने के बाद, एक से अधिक बार कॉल configure() या configure() को कॉल करना एक त्रुटि है।

यह इसके लिए उबलता है: बिल्कुल configure() या DJANGO_SETTINGS_MODULE से किसी एक का उपयोग करें। दोनों नहीं, और न ही नहीं।

django.setup() कॉलिंग "स्टैंडअलोन" Django उपयोग के लिए आवश्यक है

यदि आप Django "स्टैंडअलोन" के घटकों का उपयोग कर रहे हैं - उदाहरण के लिए, पायथन स्क्रिप्ट लिखना जो कुछ Django टेम्प्लेट लोड करता है और उन्हें रेंडर करता है, या कुछ डेटा प्राप्त करने के लिए ORM का उपयोग करता है - सेटिंग्स को कॉन्फ़िगर करने के अलावा आपको एक और कदम की आवश्यकता होगी ।

आपके द्वारा django.setup() या configure() कहा जाने के बाद, आपको अपनी सेटिंग लोड करने और Django की एप्लिकेशन रजिस्ट्री को पॉप्युलेट करने के लिए django.setup() कॉल करना होगा। उदाहरण के लिए:

import django
from django.conf import settings
from myapp import myapp_defaults

settings.configure(default_settings=myapp_defaults, DEBUG=True)
django.setup()

# Now this script or any imported module can use any part of Django it needs.
from myapp import models

ध्यान दें कि django.setup() कॉल करना केवल तभी आवश्यक है जब आपका कोड वास्तव में स्टैंडअलोन हो। जब आपके वेब सर्वर द्वारा या django-admin माध्यम से आह्वान किया जाता है, तो Django आपके लिए इसे संभाल लेगा।

django.setup() केवल एक बार कॉल किया जा सकता है।

इसलिए, स्टैंडअलोन स्क्रिप्ट में पुन: प्रयोज्य एप्लिकेशन लॉजिक लगाने से बचें, ताकि आपको अपने एप्लिकेशन में स्क्रिप्ट से कहीं और आयात करना पड़े। यदि आप उससे बच नहीं सकते हैं, तो कॉल को django.setup() एक ब्लॉक के अंदर रखें:

if __name__ == '__main__':
    import django
    django.setup()

यह भी देखें

सेटिंग्स संदर्भ
इसमें कोर और कंट्रीब ऐप सेटिंग्स की पूरी सूची है।