दो प्रकार के Django "प्रोजेक्ट्स" हैं जो मेरी ~/projects/
निर्देशिका में हैं, दोनों में थोड़ी अलग संरचना है:
- स्टैंड-अलोन वेबसाइट्स
- प्लग करने योग्य अनुप्रयोग
स्टैंड-अलोन वेबसाइट
ज्यादातर निजी परियोजनाएं, लेकिन होना जरूरी नहीं है। यह आमतौर पर इस तरह दिखता है:
~/projects/project_name/
docs/ # documentation
scripts/
manage.py # installed to PATH via setup.py
project_name/ # project dir (the one which django-admin.py creates)
apps/ # project-specific applications
accounts/ # most frequent app, with custom user model
__init__.py
...
settings/ # settings for different environments, see below
__init__.py
production.py
development.py
...
__init__.py # contains project version
urls.py
wsgi.py
static/ # site-specific static files
templates/ # site-specific templates
tests/ # site-specific tests (mostly in-browser ones)
tmp/ # excluded from git
setup.py
requirements.txt
requirements_dev.txt
pytest.ini
...
समायोजन
मुख्य सेटिंग्स उत्पादन वाले हैं। अन्य फ़ाइलें (जैसे। staging.py
,
development.py
) बस आयात सब कुछ से production.py
और केवल आवश्यक चर ओवरराइड।
प्रत्येक वातावरण के लिए, अलग-अलग सेटिंग्स फ़ाइलें हैं, उदाहरण के लिए। उत्पादन, विकास। मेरे पास कुछ परियोजनाएं हैं जिनमें परीक्षण (टेस्ट रनर के लिए), स्टेजिंग (अंतिम तैनाती से पहले एक जांच के रूप में) और हरोकू (हरोकू में तैनाती के लिए) भी हैं।
आवश्यकताएँ
मैं सीधे setup.py में आवश्यकताओं को निर्दिष्ट। केवल उन विकास / परीक्षण वातावरण के लिए जो मुझे चाहिए requirements_dev.txt
।
कुछ सेवाओं (जैसे। हरोकू) को requirements.txt
रूट डायरेक्टरी में होना आवश्यक है।
setup.py
का उपयोग करते हुए परियोजना को तैनात करते समय उपयोगी setuptools
। यह जोड़ता manage.py
है PATH
, इसलिए मैं manage.py
सीधे (कहीं भी) चला सकता हूं ।
प्रोजेक्ट-विशिष्ट एप्लिकेशन
मैं इन ऐप्स को project_name/apps/
डायरेक्टरी में डालता था और रिलेटिव इंपोर्ट का इस्तेमाल करके इन्हें इम्पोर्ट करता था।
टेम्प्लेट / स्थिर / स्थानीय / परीक्षण फ़ाइलें
मैंने इन टेम्प्लेट्स और स्टैटिक फाइल्स को ग्लोबल टेम्प्लेट / स्टैटिक डायरेक्टरी में डाला, न कि प्रत्येक ऐप के अंदर। इन फ़ाइलों को आमतौर पर लोगों द्वारा संपादित किया जाता है, जो प्रोजेक्ट कोड संरचना या अजगर के बारे में बिल्कुल भी परवाह नहीं करते हैं। यदि आप फुल-स्टैक डेवलपर अकेले या छोटी टीम में काम कर रहे हैं, तो आप प्रति-ऐप टेम्प्लेट / स्टैटिक डायरेक्टरी बना सकते हैं। यह वास्तव में सिर्फ स्वाद की बात है।
लोकेल के लिए भी यही लागू होता है, हालांकि कभी-कभी अलग-अलग लोकल डायरेक्टरी बनाने के लिए यह सुविधाजनक होता है।
टेस्ट आमतौर पर प्रत्येक ऐप के अंदर रखने के लिए बेहतर होते हैं, लेकिन आमतौर पर कई एकीकरण / कार्यात्मक परीक्षण होते हैं जो एक साथ काम करने वाले अधिक ऐप का परीक्षण करते हैं, इसलिए वैश्विक परीक्षण निर्देशिका को समझ में आता है।
Tmp निर्देशिका
वीसीएस से बाहर रखा गया परियोजना रूट में अस्थायी निर्देशिका है। इसका उपयोग विकास के दौरान मीडिया / स्टेटिक फाइल और साइक्लाइट डेटाबेस को संग्रहीत करने के लिए किया जाता है। Tmp में सब कुछ बिना किसी समस्या के कभी भी हटाया जा सकता है।
virtualenv
मैं virtualenvwrapper
सभी स्थानों को ~/.venvs
निर्देशिका में पसंद करता हूं और रखता हूं , लेकिन आप tmp/
इसे एक साथ रखने के लिए इसे अंदर रख सकते हैं।
परियोजना का खाका
मैंने इस सेटअप के लिए प्रोजेक्ट टेम्पलेट बनाया है, django-start-template
तैनाती
इस परियोजना की तैनाती निम्नलिखित है:
source $VENV/bin/activate
export DJANGO_SETTINGS_MODULE=project_name.settings.production
git pull
pip install -r requirements.txt
# Update database, static files, locales
manage.py syncdb --noinput
manage.py migrate
manage.py collectstatic --noinput
manage.py makemessages -a
manage.py compilemessages
# restart wsgi
touch project_name/wsgi.py
आप rsync
इसके बजाय का उपयोग कर सकते हैं git
, लेकिन फिर भी आपको अपने वातावरण को अपडेट करने के लिए कमांड के बैच को चलाने की आवश्यकता है।
हाल ही में, मैंने [django-deploy][2]
ऐप बनाया , जो मुझे पर्यावरण को अद्यतन करने के लिए एकल प्रबंधन कमांड चलाने की अनुमति देता है, लेकिन मैंने इसे केवल एक परियोजना के लिए उपयोग किया है और मैं अभी भी इसके लिए प्रयोग कर रहा हूं।
रेखाचित्र और ड्राफ्ट
टेम्प्लेट का ड्राफ्ट मैं वैश्विक templates/
निर्देशिका के अंदर रखता हूं । मुझे लगता है कि कोई sketches/
परियोजना रूट में फ़ोल्डर बना सकता है , लेकिन अभी तक इसका उपयोग नहीं किया है।
प्लग करने योग्य अनुप्रयोग
ये ऐप आमतौर पर ओपन-सोर्स के रूप में प्रकाशित करने के लिए तैयार हैं। मैंने django-forme से नीचे उदाहरण लिया है
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
निर्देशिकाओं का नाम स्पष्ट है (मुझे आशा है)। मैंने ऐप डायरेक्टरी के बाहर टेस्ट फाइल रखी, लेकिन यह वास्तव में मायने नहीं रखता। यह प्रदान करना महत्वपूर्ण है README
और setup.py
, इसलिए पैकेज आसानी से स्थापित हो जाता है pip
।