Django
समायोजन
खोज…
समयक्षेत्र की स्थापना
आप उस समय-सीमा को सेट कर सकते हैं जिसका उपयोग Django द्वारा settings.py
फ़ाइल में किया जाएगा। उदाहरण:
TIME_ZONE = 'UTC' # use this, whenever possible
TIME_ZONE = 'Europe/Berlin'
TIME_ZONE = 'Etc/GMT+1'
यहां मान्य टाइमज़ोन की सूची दी गई है
जब एक Windows वातावरण में चल रहा है तो यह आपके सिस्टम समय क्षेत्र के समान होना चाहिए।
यदि आप नहीं चाहते कि Django टाइमजोन-अवगत डेटाटाइम का उपयोग करे:
USE_TZ = False
डेटाबेस में सूचनाओं को संग्रहीत करने के लिए UTC
का उपयोग करने के लिए Django सर्वोत्तम प्रथाओं को कॉल करता है:
यहां तक कि अगर आपकी वेबसाइट केवल एक समय क्षेत्र में उपलब्ध है, तो भी आपके डेटाबेस में डेटा को UTC में संग्रहीत करना अच्छा है। इसका मुख्य कारण डेलाइट सेविंग टाइम (DST) है। कई देशों में डीएसटी की एक प्रणाली है, जहां घड़ियों को वसंत में आगे और शरद ऋतु में पीछे की ओर ले जाया जाता है। यदि आप स्थानीय समय में काम कर रहे हैं, तो आप वर्ष में दो बार त्रुटियों का सामना कर सकते हैं, जब संक्रमण होता है।
https://docs.djangoproject.com/en/stable/topics/i18n/timezones/
पहुंच सेटिंग्स
एक बार आपकी सभी सेटिंग्स मिल जाने के बाद, आप उन्हें अपने कोड में उपयोग करना चाहेंगे। ऐसा करने के लिए, अपनी फ़ाइल में निम्न आयात जोड़ें:
from django.conf import settings
उदाहरण के लिए, आप settings
मॉड्यूल की विशेषताओं के रूप में अपनी सेटिंग्स तक पहुँच सकते हैं:
if not settings.DEBUG:
email_user(user, message)
एप्लिकेशन पोर्टेबिलिटी सुनिश्चित करने के लिए BASE_DIR का उपयोग करना
आपके एप्लिकेशन में हार्ड कोड पथों के लिए यह एक बुरा विचार है। व्यक्ति को हमेशा सापेक्ष url का उपयोग करना चाहिए ताकि आपका कोड विभिन्न मशीनों पर निर्बाध रूप से काम कर सके। इसे सेट करने का सबसे अच्छा तरीका है कि इस तरह से एक वैरिएबल को परिभाषित किया जाए
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
फिर अपनी सभी अन्य सेटिंग्स को परिभाषित करने के लिए इस BASE_DIR
चर का उपयोग करें।
TEMPLATE_PATH = os.path.join(BASE_DIR, "templates")
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
और इसी तरह। यह सुनिश्चित करता है कि आप बिना किसी चिंता के विभिन्न मशीनों में अपना कोड पोर्ट कर सकते हैं।
हालाँकि, os.path
थोड़ा वर्बोज़ है। उदाहरण के लिए यदि आपकी सेटिंग मॉड्यूल project.settings.dev
है। project.settings.dev
, आपको लिखना होगा:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
एक विकल्प unipath
मॉड्यूल का उपयोग करना है (जिसे आप pip install unipath
साथ स्थापित कर सकते हैं)।
from unipath import Path
BASE_DIR = Path(__file__).ancestor(2) # or ancestor(3) if using a submodule
TEMPLATE_PATH = BASE_DIR.child('templates')
STATICFILES_DIRS = [
BASE_DIR.child('static'),
]
सर्वरों में सेटिंग्स का प्रबंधन करने के लिए पर्यावरण चर का उपयोग करना
पर्यावरण चर का उपयोग करना एक व्यापक रूप से इस्तेमाल किया गया तरीका है, जो पर्यावरण के आधार पर ऐप के कॉन्फिगरेशन को सेट करता है, जैसा कि द ट्वेल्व-फैक्टर ऐप में कहा गया है।
के रूप में विन्यास तैनाती वातावरण के बीच बदलने की संभावना है, यह अनुप्रयोग के स्रोत कोड में खुदाई के बिना विन्यास को संशोधित करने के लिए एक बहुत ही दिलचस्प तरीका है, साथ ही साथ आवेदन फाइलों और स्रोत कोड भंडार के बाहर रहस्य रखते हुए।
Django में, मुख्य सेटिंग्स आपके प्रोजेक्ट के फ़ोल्डर में settings.py
रूप में स्थित हैं। जैसा कि यह एक साधारण पायथन फ़ाइल है, आप पर्यावरण का उपयोग करने के लिए मानक पुस्तकालय से पायथन के os
मॉड्यूल का उपयोग कर सकते हैं (और यहां तक कि उपयुक्त चूक भी हैं)।
settings.py
import os
SECRET_KEY = os.environ.get('APP_SECRET_KEY', 'unsafe-secret-key')
DEBUG = bool(os.environ.get('DJANGO_DEBUG', True) == 'False')
ALLOWED_HOSTS = os.environ.get('DJANGO_ALLOWED_HOSTS', '').split()
DATABASES = {
'default': {
'ENGINE': os.environ.get('APP_DB_ENGINE', 'django.db.backends.sqlite3'),
'NAME': os.environ.get('DB_NAME', 'db.sqlite'),
'USER': os.environ.get('DB_USER', ''),
'PASSWORD': os.environ.get('DB_PASSWORD', ''),
'HOST': os.environ.get('DB_HOST', None),
'PORT': os.environ.get('DB_PORT', None),
'CONN_MAX_AGE': 600,
}
}
Django के साथ आप अपनी डेटाबेस तकनीक को बदल सकते हैं, ताकि आप अपनी विकास मशीन पर sqlite3 का उपयोग कर सकें (और यह एक स्रोत नियंत्रण प्रणाली के लिए एक डिफ़ॉल्ट डिफ़ॉल्ट होना चाहिए)। हालांकि यह संभव है यह उचित नहीं है:
बैकिंग सेवाएं, जैसे कि ऐप का डेटाबेस, कतार प्रणाली, या कैश, एक ऐसा क्षेत्र है जहां देव / ठेस समता महत्वपूर्ण है। ( बारह फैक्टर ऐप - देव / प्रोडक्ट समानता )
डेटाबेस कनेक्शन के लिए DATABASE_URL पैरामीटर का उपयोग करने के लिए, कृपया संबंधित उदाहरण देखें ।
कई सेटिंग्स का उपयोग करना
Django डिफ़ॉल्ट परियोजना लेआउट एक भी बनाता है settings.py
। यह इस तरह विभाजित करने के लिए अक्सर उपयोगी होता है:
myprojectroot/
myproject/
__init__.py
settings/
__init__.py
base.py
dev.py
prod.py
tests.py
यह आपको अलग-अलग सेटिंग्स के साथ काम करने में सक्षम बनाता है, चाहे आप विकास, उत्पादन, परीक्षण या जो कुछ भी हो।
डिफ़ॉल्ट लेआउट से इस लेआउट में जाने पर, मूल settings.py
settings/base.py
हो जाता है। जब प्रत्येक अन्य from .base import *
शुरू करके " settings/base.py
" settings/base.py
कर from .base import *
। उदाहरण के लिए, यहाँ settings/dev.py
तरह लग सकता है:
# -*- coding: utf-8 -*-
from .base import * # noqa
DEBUG = True
INSTALLED_APPS.extend([
'debug_toolbar',
])
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
INTERNAL_IPS = ['192.168.0.51', '192.168.0.69']
वैकल्पिक # 1
django-admin
आदेशों को ठीक से काम करने के लिए, आपको DJANGO_SETTINGS_MODULE
पर्यावरण चर (जो myproject.settings
लिए चूक करता है) सेट करना होगा। विकास में, आप इसे myproject.settings.dev
सेट करेंगे। उत्पादन में, आप इसे myproject.settings.prod
सेट करेंगे। यदि आप एक virtualenv का उपयोग करते हैं, तो सबसे अच्छा यह है कि आप इसे अपने postactivate
स्क्रिप्ट में सेट करें:
#!/bin/sh
export PYTHONPATH="/home/me/django_projects/myproject:$VIRTUAL_ENV/lib/python3.4"
export DJANGO_SETTINGS_MODULE="myproject.settings.dev"
आपको एक सेटिंग मॉड्यूल द्वारा बताया नहीं है उपयोग करना चाहते हैं DJANGO_SETTINGS_MODULE
एक बार के लिए, आप उपयोग कर सकते --settings
का विकल्प django-admin
:
django-admin test --settings=myproject.settings.tests
वैकल्पिक # 2
यदि आप DJANGO_SETTINGS_MODULE
को उसके डिफ़ॉल्ट कॉन्फ़िगरेशन ( myproject.settings
) पर छोड़ना चाहते हैं, तो आप बस settings
मॉड्यूल को बता सकते हैं कि कौन सा कॉन्फ़िगरेशन आपके __init__.py
फ़ाइल में आयात करके लोड करना है।
उपर्युक्त उदाहरण में, __init__.py
सेट होने से वही परिणाम प्राप्त किया जा सकता है:
from .dev import *
कई आवश्यकताओं फ़ाइलों का उपयोग करना
प्रत्येक आवश्यकताओं की फ़ाइलों को सेटिंग्स फ़ाइलों के नाम से मेल खाना चाहिए। अधिक जानकारी के लिए कई सेटिंग्स का उपयोग करना पढ़ें।
संरचना
djangoproject
├── config
│ ├── __init__.py
│ ├── requirements
│ │ ├── base.txt
│ │ ├── dev.txt
│ │ ├── test.txt
│ │ └── prod.txt
│ └── settings
└── manage.py
base.txt
फ़ाइल में, सभी वातावरणों में उपयोग की जाने वाली निर्भरताएँ।
# base.txt
Django==1.8.0
psycopg2==2.6.1
jinja2==2.8
और अन्य सभी फाइलों में, आधार आधार के साथ -r base.txt
, और वर्तमान परिवेश के लिए आवश्यक विशिष्ट निर्भरता जोड़ें।
# dev.txt
-r base.txt # includes all dependencies in `base.txt`
# specific dependencies only used in dev env
django-queryinspect==0.1.0
# test.txt
-r base.txt # includes all dependencies in `base.txt`
# specific dependencies only used in test env
nose==1.3.7
django-nose==1.4
# prod.txt
-r base.txt # includes all dependencies in `base.txt`
# specific dependencies only used in production env
django-queryinspect==0.1.0
gunicorn==19.3.0
django-storages-redux==1.3
boto==2.38.0
अंत में, निर्भरता स्थापित करने के लिए। उदाहरण, देव env पर: pip install -r config/requirements/dev.txt
JSON फ़ाइल का उपयोग करके गुप्त डेटा छिपाना
GCS या SVN जैसे VCS का उपयोग करते समय, कुछ गुप्त डेटा होते हैं, जिन्हें कभी भी संस्करणबद्ध नहीं किया जाना चाहिए (चाहे रिपॉजिटरी सार्वजनिक हो या निजी)।
उन डेटा के बीच, आप SECRET_KEY
सेटिंग और डेटाबेस पासवर्ड पाते हैं।
संस्करण नियंत्रण से इन सेटिंग्स को छुपाने के लिए एक आम बात यह है कि अपनी परियोजना की जड़ में एक फ़ाइल secrets.json
बनाएँ। ( विचार के लिए धन्यवाद " Django के दो स्कूप " ):
{
"SECRET_KEY": "N4HE:AMk:.Ader5354DR453TH8SHTQr",
"DB_PASSWORD": "v3ry53cr3t"
}
और इसे अपनी उपेक्षा सूची में जोड़ें ( .gitignore
लिए .ignignore):
*.py[co]
*.sw[po]
*~
/secrets.json
फिर अपनी settings
मॉड्यूल में निम्नलिखित फ़ंक्शन जोड़ें:
import json
import os
from django.core.exceptions import ImproperlyConfigured
with open(os.path.join(BASE_DIR, 'secrets.json')) as secrets_file:
secrets = json.load(secrets_file)
def get_secret(setting, secrets=secrets):
"""Get secret setting or fail with ImproperlyConfigured"""
try:
return secrets[setting]
except KeyError:
raise ImproperlyConfigured("Set the {} setting".format(setting))
फिर सेटिंग्स को इस तरह भरें:
SECRET_KEY = get_secret('SECRET_KEY')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgres',
'NAME': 'db_name',
'USER': 'username',
'PASSWORD': get_secret('DB_PASSWORD'),
},
}
पर्यावरण से DATABASE_URL का उपयोग करना
पाओएस साइट्स जैसे हरोकू में, कई मापदंडों (होस्ट, पोर्ट, उपयोगकर्ता, पासवर्ड ...) के बजाय डेटाबेस जानकारी को एकल URL परिवेश चर के रूप में प्राप्त करना सामान्य है।
एक मॉड्यूल है, dj_database_url
जो स्वचालित रूप से DATABASE_URL पर्यावरण चर को Django में डेटाबेस सेटिंग्स को इंजेक्ट करने के लिए उपयुक्त पायथन शब्दकोश में निकालता है।
उपयोग:
import dj_database_url
if os.environ.get('DATABASE_URL'):
DATABASES['default'] =
dj_database_url.config(default=os.environ['DATABASE_URL'])