У моєму ~/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 можна було будь-коли видалити без проблем.
Віртуалєв
Я віддаю перевагу virtualenvwrapper
і розміщую всі венузи в ~/.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
.