Ada dua jenis "proyek" Django yang saya miliki di ~/projects/
direktori saya , keduanya memiliki struktur yang sedikit berbeda .:
- Situs web yang berdiri sendiri
- Aplikasi yang dapat dicolokkan
Situs web yang berdiri sendiri
Sebagian besar proyek pribadi, tetapi tidak harus. Biasanya terlihat seperti ini:
~/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
...
Pengaturan
Pengaturan utama adalah pengaturan produksi. File lain (mis. staging.py
,
development.py
) Cukup mengimpor semuanya dari production.py
dan mengabaikan hanya variabel yang diperlukan.
Untuk setiap lingkungan, ada file pengaturan terpisah, mis. produksi, pengembangan. Saya beberapa proyek saya juga menguji (untuk test runner), pementasan (sebagai cek sebelum penyebaran akhir) dan pengaturan heroku (untuk penempatan ke heroku).
Persyaratan
Saya lebih suka menentukan persyaratan di setup.py secara langsung. Hanya yang diperlukan untuk lingkungan pengembangan / pengujian yang saya miliki requirements_dev.txt
.
Beberapa layanan (mis. Heroku) harus ada requirements.txt
di direktori root.
setup.py
Berguna saat menggunakan proyek menggunakan setuptools
. Ia menambahkan manage.py
untuk PATH
, jadi saya dapat menjalankan manage.py
langsung (di mana saja).
Aplikasi khusus proyek
Saya biasa meletakkan aplikasi ini ke project_name/apps/
direktori dan mengimpornya menggunakan impor relatif.
Template / file statis / lokal / tes
Saya menempatkan template dan file statis ini ke template global / direktori statis, bukan di dalam setiap aplikasi. File-file ini biasanya diedit oleh orang-orang, yang tidak peduli dengan struktur kode proyek atau python sama sekali. Jika Anda adalah pengembang tumpukan penuh yang bekerja sendiri atau dalam tim kecil, Anda dapat membuat templat per-aplikasi / direktori statis. Ini benar-benar hanya masalah selera.
Hal yang sama berlaku untuk lokal, meskipun kadang-kadang lebih nyaman untuk membuat direktori lokal terpisah.
Tes biasanya lebih baik untuk ditempatkan di dalam setiap aplikasi, tetapi biasanya ada banyak tes integrasi / fungsional yang menguji lebih banyak aplikasi yang bekerja bersama, sehingga direktori tes global memang masuk akal.
Direktori tmp
Ada direktori sementara di root proyek, dikecualikan dari VCS. Ini digunakan untuk menyimpan file media / statis dan database sqlite selama pengembangan. Semua yang ada di tmp dapat dihapus kapan saja tanpa masalah.
Virtualenv
Saya lebih suka virtualenvwrapper
dan menempatkan semua vv ke ~/.venvs
direktori, tetapi Anda bisa menempatkannya di dalam tmp/
untuk menyimpannya.
Template proyek
Saya telah membuat template proyek untuk pengaturan ini, django-start-template
Penyebaran
Penerapan proyek ini adalah sebagai berikut:
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
Anda dapat menggunakan rsync
alih-alih git
, tetapi tetap saja Anda harus menjalankan banyak perintah untuk memperbarui lingkungan Anda.
Baru-baru ini, saya membuat [django-deploy][2]
aplikasi, yang memungkinkan saya menjalankan perintah manajemen tunggal untuk memperbarui lingkungan, tetapi saya telah menggunakannya untuk satu proyek saja dan saya masih bereksperimen dengannya.
Sketsa dan konsep
Draft template yang saya tempatkan di dalam templates/
direktori global . Saya kira orang dapat membuat folder sketches/
di root proyek, tetapi belum menggunakannya.
Aplikasi Pluggable
Aplikasi ini biasanya disiapkan untuk dipublikasikan sebagai sumber terbuka. Saya telah mengambil contoh di bawah ini dari django-forme
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
Nama direktori jelas (saya harap). Saya meletakkan file uji di luar direktori aplikasi, tetapi sebenarnya tidak masalah. Sangat penting untuk menyediakan README
dan setup.py
, sehingga paket mudah diinstal melalui pip
.
scripts
argumen kata kunci: github.com/elvard/django-start-template/blob/master/project/... Saya sukatmp
karena menyarankan "sesuatu sementara" yang dapat dihapus kapan saja. Toplevellocale
dir tidak perlu, Anda bisa meletakkannya di mana saja. Saya hanya ingin konsisten dengan dirs statis / template.git checkout
atau dengan mengecualikan hanya satu dir 'tmp' ketika kloning direktori proyek. Jadi sepertinya struktur Anda memenuhi semua persyaratan, dan cukup jelas untuk digunakan secara teratur tanpa keraguan. Saya menerima jawaban Anda. Terima kasih.src
di dalam root proyek. Ini adalah copy pekerjaan file sumber dan root repositori git. Aku bisa membuat beberapa salinan dari direktori ini -src
,src.bak
,src_tmp
dan sebagainya. Lainnya dirs non-repo sepertienv
,tmp
,media
,backup
berada pada tingkat yang sama. Jadi saya bisacp -r src src.bak
kapan saja saya ingin melakukan percobaan dengan git atau membandingkan versi dengan alat eksternal. Meskipun Anda memiliki file lokal di dalam repositori Anda, saya memiliki repositori di dalam dir file lokal saya (sebaliknya). Nama yang lebih baik darisrc
dir saya adalahrepo
.Jawaban saya terinspirasi oleh pengalaman kerja saya sendiri, dan sebagian besar dalam buku Two Scoops of Django yang sangat saya rekomendasikan, dan di mana Anda dapat menemukan penjelasan yang lebih rinci tentang semuanya. Saya hanya akan menjawab beberapa poin, dan perbaikan atau koreksi akan disambut. Tetapi ada juga perilaku yang lebih benar untuk mencapai tujuan yang sama.
Proyek
Saya memiliki folder utama di direktori pribadi saya tempat saya memelihara semua proyek tempat saya bekerja.
File Sumber
Saya pribadi menggunakan root proyek Django sebagai root repositori proyek saya. Namun dalam buku ini dianjurkan untuk memisahkan kedua hal tersebut. Saya pikir ini adalah pendekatan yang lebih baik, jadi saya berharap untuk mulai membuat perubahan secara progresif pada proyek saya.
Repository
Git atau Mercurial tampaknya menjadi sistem kontrol versi paling populer di kalangan pengembang Django. Dan layanan hosting paling populer untuk backup GitHub dan Bitbucket .
Lingkungan Virtual
Saya menggunakan virtualenv dan virtualenvwrapper. Setelah menginstal yang kedua, Anda perlu mengatur direktori kerja Anda. Saya adalah pada saya / home / envs direktori, seperti yang disarankan pada panduan instalasi virtualenvwrapper. Tapi saya tidak berpikir yang paling penting adalah di mana ia ditempatkan. Yang paling penting ketika bekerja dengan lingkungan virtual adalah menjaga agar file needs.txt tetap terbarui.
Folder Static Root Project
Folder Media Root Project
Root Repositori README
LICENSE
Root repositori
Root Repositori Dokumen . Paket python ini dapat membantu Anda membuat dokumentasi Anda lebih mudah:
Sketsa
Contohnya
Basis data
sumber
Saya tidak suka membuat
settings/
direktori baru . Saya cukup menambahkan file bernamasettings_dev.py
dansettings_production.py
jadi saya tidak perlu mengeditBASE_DIR
. Pendekatan di bawah ini meningkatkan struktur default alih-alih mengubahnya.Saya pikir ini:
lebih baik dari ini:
Konsep ini berlaku untuk file lain juga.
Saya biasanya menempatkan
node_modules/
danbower_components/
dalam direktori proyek di dalamstatic/
folder default .Suatu
vendor/
direktori untuk Git Submodules tetapi biasanya saya menempatkannya distatic/
folder.sumber
Inilah yang saya ikuti di sistem saya.
Semua Proyek : Ada direktori proyek di folder rumah saya yaitu
~/projects
. Semua proyek ada di dalamnya.Proyek Perorangan : Saya mengikuti templat struktur standar yang digunakan oleh banyak pengembang yang disebut Django-skel untuk proyek perorangan. Ini pada dasarnya menangani semua file statis dan file media dan semua.
Lingkungan virtual : Saya memiliki folder virtualenvs di dalam rumah saya untuk menyimpan semua lingkungan virtual dalam sistem
~/virtualenvs
. Ini memberi saya fleksibilitas bahwa saya tahu semua lingkungan virtual yang saya miliki dan dapat terlihat mudah digunakan3 di atas adalah partisi utama dari lingkungan kerja saya.
Semua bagian lain yang Anda sebutkan sebagian besar bergantung pada proyek ke proyek (yaitu Anda mungkin menggunakan database berbeda untuk proyek yang berbeda). Jadi mereka harus tinggal di proyek masing-masing.
sumber
Sesuai kerangka proyek Django, struktur direktori yang tepat yang dapat diikuti adalah:
Rujuk https://django-project-skeleton.readthedocs.io/en/latest/structure.html untuk struktur direktori terbaru.
sumber
Anda dapat menggunakan https://github.com/Mischback/django-project-skeleton repository.
Jalankan perintah di bawah ini:
Strukturnya kira-kira seperti ini:
sumber