В моем ~/projects/
каталоге есть два вида «проектов» Django , оба имеют немного различную структуру:
- Автономные сайты
- Сменные приложения
Автономный сайт
В основном частные проекты, но не обязательно. Обычно это выглядит так:
~/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/
каталог и импортировать их, используя относительный импорт.
Шаблоны / статические / локаль / тестовые файлы
Я поместил эти шаблоны и статические файлы в глобальный каталог templates / static, а не в каждое приложение. Эти файлы обычно редактируются людьми, которых вообще не волнует структура кода проекта или python. Если вы являетесь разработчиком полного стека и работаете в одиночку или в небольшой команде, вы можете создать для каждого приложения шаблоны / статический каталог. Это действительно просто вопрос вкуса.
То же самое относится и к локали, хотя иногда удобно создать отдельный каталог локали.
Обычно тесты лучше размещать внутри каждого приложения, но обычно существует множество интеграционных / функциональных тестов, которые тестируют больше приложений, работающих вместе, поэтому каталог глобальных тестов имеет смысл.
Каталог Tmp
В корне проекта есть временный каталог, исключенный из VCS. Он используется для хранения медиа / статических файлов и базы данных sqlite во время разработки. Все в tmp может быть удалено в любое время без проблем.
Virtualenv
Я предпочитаю 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/
в корне проекта, но еще не использовал ее.
Сменное приложение
Эти приложения обычно готовы к публикации с открытым исходным кодом. Я взял пример ниже с Джанго-формы
~/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
.
scripts
ключевое слово аргумент: github.com/elvard/django-start-template/blob/master/project/… Мне нравится,tmp
потому что он предлагает «что-то временное», которое можно удалить в любое время. Toplevellocale
dir не требуется, вы можете разместить его где угодно. Мне просто нравится, чтобы это соответствовало директивам static / templates.git checkout
или путем исключения только одного dir 'tmp' при клонировании каталога проекта. Таким образом, кажется, что ваша структура отвечает всем требованиям, и она достаточно понятна для использования на регулярной основе без каких-либо сомнений. Я принимаю ваш ответ. Спасибо.src
каталог внутри корня проекта. Это рабочая копия исходных файлов и корня репозитория git. Я могу сделать несколько копий этого каталога -src
,src.bak
,src_tmp
и так далее. Другие каталоги не-Репо , какenv
,tmp
,media
,backup
находятся на том же уровне. Поэтому я могу вcp -r src src.bak
любой момент поэкспериментировать с git или сравнить версии с внешним инструментом. В то время как у вас есть локальные файлы внутри вашего хранилища, у меня есть хранилище внутри моего каталога локальных файлов (наоборот). Лучшее имя моегоsrc
режиссераrepo
.Мой ответ основан на моем собственном опыте работы, и в основном в книге « Два черпака Джанго», которую я очень рекомендую, и где вы можете найти более подробное объяснение всего. Я просто отвечу на некоторые вопросы, и любые улучшения или исправления будут приветствоваться. Но также могут быть более правильные способы достижения той же цели.
Проекты
У меня есть главная папка в моем личном каталоге, где я храню все проекты, над которыми я работаю.
Исходные файлы
Я лично использую корень проекта django в качестве корня репозитория моих проектов. Но в книге рекомендуется разделить обе вещи. Я думаю, что это лучший подход, поэтому я надеюсь начать постепенно вносить изменения в мои проекты.
Репозиторий
Git или Mercurial кажется наиболее популярной системой контроля версий среди разработчиков Django. И самые популярные хостинговые сервисы для бэкапов GitHub и Bitbucket .
Виртуальная среда
Я использую virtualenv и virtualenvwrapper. После установки второго вам нужно настроить ваш рабочий каталог. Мой каталог находится в моем / home / envs каталоге, как это рекомендуется в руководстве по установке virtualenvwrapper. Но я не думаю, что самое главное, где это находится. При работе с виртуальными средами важнее всего поддерживать файл require.txt в актуальном состоянии.
Папка статического корневого проекта
Папка проекта Media Root
README
Корень репозитория
ЛИЦЕНЗИЯ
Корень хранилища
Корень хранилища документов . Эти пакеты Python могут помочь вам упростить управление вашей документацией:
Этюды
Примеры
База данных
источник
Я не люблю создавать новый
settings/
каталог. Я просто добавить файлы с именемsettings_dev.py
иsettings_production.py
поэтому не нужно редактироватьBASE_DIR
. Приведенный ниже подход увеличивает структуру по умолчанию вместо ее изменения.Я думаю это:
лучше чем это:
Эта концепция применима и к другим файлам.
Я обычно размещаю
node_modules/
иbower_components/
в каталоге проекта вstatic/
папке по умолчанию .Иногда
vendor/
каталог для Git Submodules, но обычно я помещаю их вstatic/
папку.источник
Вот то, что я следую в моей системе.
Все проекты : Существует каталог проектов в моей домашней папке есть
~/projects
. Все проекты лежат внутри него.Индивидуальный проект : я следую стандартному шаблону структуры, используемому многими разработчиками под названием django-skel для отдельных проектов. Это в основном заботится обо всех ваших статических файлах и медиа-файлах и все.
Виртуальная среда : У меня есть virtualenvs папки внутри мой дом , чтобы хранить все виртуальные среды в системе , т.е.
~/virtualenvs
. Это дает мне гибкость, что я знаю, что все виртуальные среды у меня есть и может выглядеть легко использоватьВыше 3 являются основными разделами моей рабочей среды.
Все остальные части, которые вы упомянули , в основном зависят от проекта к проекту (т.е. вы можете использовать разные базы данных для разных проектов). Поэтому они должны проживать в своих индивидуальных проектах.
источник
Согласно Django Project Skeleton, правильная структура каталогов, которой можно следовать:
Обратитесь к https://django-project-skeleton.readthedocs.io/en/latest/structure.html для получения последней структуры каталогов.
источник
Вы можете использовать https://github.com/Mischback/django-project-skeleton репозиторий.
Запустите команду ниже:
Структура примерно такая:
источник