Benim ~/projects/
dizinde var Django "projeler" iki tür vardır , her ikisi de biraz farklı bir yapıya sahip .:
- Bağımsız web siteleri
- Takılabilir uygulamalar
Bağımsız web sitesi
Çoğunlukla özel projeler, ama olmak zorunda değil. Genellikle şöyle görünür:
~/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
...
Ayarlar
Ana ayarlar üretim ayarlarıdır. Diğer dosyalar (örn. staging.py
,
development.py
) Her şeyi içe aktarır production.py
ve yalnızca gerekli değişkenleri geçersiz kılar.
Her ortam için ayrı ayar dosyaları vardır, örn. üretim, geliştirme. Ben de bazı test (test koşucusu için), evreleme (son dağıtım öncesi bir kontrol olarak) ve heroku (heroku dağıtımı için) ayarları var.
Gereksinimler
Daha çok setup.py dosyasındaki gereksinimleri doğrudan belirtiyorum. Sadece içinde bulunduğum geliştirme / test ortamı için gerekli olanlar requirements_dev.txt
.
Bazı hizmetlerin (örn. Heroku) requirements.txt
kök dizinde olması gerekir .
setup.py
Kullanarak projeyi dağıtırken kullanışlıdır setuptools
. Bu ekler manage.py
için PATH
ben çalışabilmesi için, manage.py
doğrudan (her yerde).
Projeye özgü uygulamalar
Bu uygulamaları project_name/apps/
dizine koyar ve göreli içe aktarmalar kullanarak içe aktarırdım.
Şablonlar / statik / yerel / sınama dosyaları
Bu şablonları ve statik dosyaları, her uygulamanın içinde değil, global şablonlara / statik dizine koydum. Bu dosyalar genellikle proje kodu yapısını veya python'u umursamayan kişiler tarafından düzenlenir. Tek başına veya küçük bir ekipte çalışan tam yığın geliştiriciyseniz, uygulama başına şablonlar / statik dizin oluşturabilirsiniz. Gerçekten sadece bir tat meselesi.
Aynısı yerel ayar için de geçerlidir, ancak bazen ayrı yerel ayar dizini oluşturmak uygun olur.
Testler genellikle her uygulamanın içine yerleştirilmek için daha iyidir, ancak genellikle birlikte çalışan daha fazla uygulamayı test eden birçok entegrasyon / fonksiyonel test vardır, bu nedenle küresel testler dizini mantıklıdır.
TMP Dizini
Proje kökünde VCS dışında bırakılan geçici bir dizin vardır. Geliştirme sırasında medya / statik dosyaları ve sqlite veritabanını depolamak için kullanılır. Tmp içindeki her şey sorunsuz bir şekilde silinebilir.
virtualenv
virtualenvwrapper
Tüm vivleri ~/.venvs
dizine tercih ederim ve bir tmp/
arada tutmak için içine yerleştirebilirsiniz .
Proje şablonu
Bu kurulum için proje şablonu oluşturdum, django-start-template
yayılma
Bu projenin dağıtımı şu şekildedir:
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
Bunun rsync
yerine kullanabilirsiniz git
, ancak yine de ortamınızı güncellemek için bir dizi komut çalıştırmanız gerekir.
Son zamanlarda, [django-deploy][2]
ortamı güncellemek için tek yönetim komutunu çalıştırmamı sağlayan bir uygulama yaptım , ancak bunu sadece bir proje için kullandım ve hala deniyorum.
Eskizler ve taslaklar
Genel templates/
dizinin içine yerleştirdiğim şablon taslağı . Sanırım biri sketches/
proje kökünde klasör oluşturabilir , ancak henüz kullanmadım.
Takılabilir uygulama
Bu uygulamalar genellikle açık kaynak olarak yayınlanmaya hazırlanır. Aşağıda django-forme'den örnek aldım
~/projects/django-app/
docs/
app/
tests/
example_project/
LICENCE
MANIFEST.in
README.md
setup.py
pytest.ini
tox.ini
.travis.yml
...
Dizinlerin adı açıktır (umarım). Test dosyalarını uygulama dizininin dışına koydum, ama gerçekten önemli değil. Sağlanması önemlidir README
ve setup.py
bu nedenle paket kolayca kurulabilir pip
.