มี 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.pypip