มี 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
และแทนที่เพียงตัวแปรที่จำเป็น
สำหรับแต่ละสภาพแวดล้อมมีไฟล์การตั้งค่าแยกต่างหากเช่น การผลิตการพัฒนา ฉันมีบางโครงการที่ฉันได้ทำการทดสอบ (สำหรับนักทดสอบ), การจัดเตรียม (เพื่อตรวจสอบก่อนการใช้งานครั้งสุดท้าย) และการตั้งค่า heroku (สำหรับการปรับใช้กับ heroku)
ความต้องการ
ฉันต้องการระบุข้อกำหนดใน setup.py โดยตรง เฉพาะที่จำเป็นสำหรับการพัฒนา / ทดสอบสภาพแวดล้อมที่ฉันมีrequirements_dev.txt
ค่ะ
บริการบางอย่าง (เช่น heroku) จำเป็นต้องมีrequirements.txt
ในไดเรกทอรีราก
setup.py
setuptools
มีประโยชน์เมื่อปรับใช้โครงการใช้ มันเพิ่มmanage.py
เข้าPATH
มาดังนั้นฉันจึงสามารถเรียกใช้manage.py
โดยตรง (ทุกที่)
แอพเฉพาะโครงการ
ฉันเคยใส่แอพเหล่านี้ลงในproject_name/apps/
ไดเรกทอรีและนำเข้าโดยใช้การนำเข้าแบบสัมพัทธ์
ไฟล์เทมเพลต / สแตติก / ภาษา / การทดสอบ
ฉันวางเทมเพลตและไฟล์สแตติกเหล่านี้ลงในแม่แบบส่วนกลาง / ไดเรกทอรีคงที่ไม่ใช่ภายในแต่ละแอพ โดยทั่วไปแล้วไฟล์เหล่านี้จะถูกแก้ไขโดยผู้ที่ไม่สนใจโครงสร้างรหัสโครงการหรือไพ ธ อนเลย หากคุณเป็นนักพัฒนาสแต็กทำงานคนเดียวหรือเป็นทีมเล็ก ๆ คุณสามารถสร้างเทมเพลต / สแตติกไดเรคทอรีต่อแอพได้ มันเป็นเรื่องของรสนิยมจริงๆ
เช่นเดียวกันกับสถานที่แม้ว่าบางครั้งจะสะดวกในการสร้างไดเรกทอรีสถานที่แยก
การทดสอบมักจะดีกว่าที่จะวางในแต่ละแอพ แต่โดยปกติจะมีการทดสอบบูรณาการ / การทำงานจำนวนมากซึ่งทดสอบแอพทำงานร่วมกันมากขึ้นดังนั้นไดเรกทอรีการทดสอบระดับโลกจึงสมเหตุสมผล
ไดเร็กทอรี Tmp
มีไดเร็กทอรีชั่วคราวในรูทโปรเจ็กต์ที่แยกออกจาก VCS มันถูกใช้เพื่อจัดเก็บสื่อ / ไฟล์คงที่และฐานข้อมูล sqlite ในระหว่างการพัฒนา ทุกอย่างใน tmp สามารถลบได้ตลอดเวลาโดยไม่มีปัญหาใด ๆ
virtualenv
ฉันชอบvirtualenvwrapper
และวาง venvs ทั้งหมดไว้ใน~/.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