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
.