django

Как создать проект Django из шаблона

  • четверг, 13 февраля 2020 г. в 00:26:09
https://habr.com/ru/company/otus/blog/488098/
  • Блог компании OTUS. Онлайн-образование
  • Разработка веб-сайтов
  • Python
  • Django


И снова здравствуйте! Специально для студентов курса «Web-разработчик на Python» мы подготовили еще один интересный перевод.





Шаблон проекта на Django – это естественный способ решения проблем, которые возникают, когда формат Django-проекта по умолчанию уже не отвечает требованиям. Сегодня в этом руководстве вы узнаете, как создать свой собственный проект из шаблона.

Что такое шаблон проекта в Django?


Одной из малоизвестных особенностей Django является возможность создания проекта из шаблона, то есть пользовательской структуры каталога.

Это удобно, когда формата проекта по умолчанию уже не достаточно (и его точно будет недостаточно, когда вы захотите развернуть свое решение на продакшене, поверьте мне), или когда вы достигните той точки, когда будете использовать одни и те же конфигурации снова и снова для множества проектов на Django.

Шаблон проекта Django – это не более чем проект с заранее определенной кастомной структурой каталогов, который вы можете создать сами за считанные минуты.
Примером популярного шаблона Django является django-cookiecutter. Django-cookiecutter обладает широким спектром функций и конфигураций, которые уже готовы к самодостаточному развертыванию на продакшен, это именно тот путь, который можно использовать для создания практически любого нового проекта на Django.

Тем не менее, django-cookiecutter порой избыточен, особенно для начинающих, поэтому прежде, чем использовать его, создайте более простой шаблон Django, который может лучше помочь понять основы.

В следующих разделах вы узнаете, как создать свой собственный шаблон.

Как создать свой собственный шаблон проекта на Django


Для начала создайте виртуальную среду Python в выбранной папке и установите Django (обратите внимание, что это четыре отдельные команды):

mkdir project-name && cd $_
python3 -m venv venv
source venv/bin/activate
pip install django

Затем создайте проект Django с помощью:

django-admin startproject project_name .

Обратите внимание на название, оно должно быть именно project_name. После этого откройте проект в редакторе.

(Обратите внимание, что в нашем примере я использовал project_name для папки и для названия проекта).

Теперь вам нужно просмотреть каждый файл в проекте и заменить все project_name на {{ project_name }} (однострочная команда sed вполне подойдет).

Файлы, которые вам нужно будет изменить:

  • manage.py
  • settings.py
  • wsgi.py
  • asgi.py

Как вы могли догадаться, переменная {{ project_name }} – это плейсхолдер. Например, в manage.py вам нужно будет заменить следующее:

# manage.py

def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')
    try:
# omit

На это:

# manage.py

def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings')
    try:
# omit

В wsgi.py вы поменяете это:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project_name.settings')

На следующее:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', '{{ project_name }}.settings')

И так далее.

Помимо того, вы можете создать любую конфигурацию, которую захотите, или даже лучше, разобрать настройки Django в отдельные файлы для разработки, тестирования и продакшена. Пример вы найдете здесь.

Перед тем, как приступить к следующему шагу не забудьте удалить виртуальную среду из шаблона проекта.

Как создать проект Django из собственного шаблона


Теперь, когда у вас есть шаблон проекта, вы можете его использовать.

Для этого создайте новую виртуальную среду Python в другой папке и установите Django:

mkdir new-django-project && cd $_
python3 -m venv venv
source venv/bin/activate
pip install django

Теперь вместо того, чтобы просто выполнить django-admin startproject, мы передадим флаг --template для установки из нашего шаблона. Допустим, если вы создали шаблон в своем домашнем каталоге ~/project-name, вы выполните:

django-admin startproject --template ~/project-name new_django_project .

Эта команда создаст новый проект Django из шаблона.

(Обратите внимание, что в этом примере я использовал new-django-project в качестве внешней папки и new_django_project для имени проекта).

Теперь вы можете задаться вопросом, возможно ли использовать удаленный шаблон из репозитория на GitHub, например. Да, конечно!

Как создать проект Django из удаленного шаблона


Флаг --template для startproject может принимать URL в качестве удаленного источника. Значит, вы можете создать Django-проект из удаленного шаблона, например:

django-admin startproject --template https://github.com/username/repo/archive/master.zip new_django_project .

Бонус: шаблоны для всего


В дополнение к шаблонизации файлов связанных с Django, вы можете сделать то же самое для любого другого файла в проекте.

Представьте, что вам нужно развернуться на Heroku, где требуется Procfile. Чтобы передать Procfile через систему шаблонов таким образом, чтобы {{ project_name }} заменялось фактическим именем проекта, можно выполнить startproject с флагом --name.

django-admin startproject --template https://github.com/username/repo/archive/master.zip --name=Procfile new_django_project .

Убедитесь, что в Procfile есть плейсхолдер для project_name:

release: python manage.py migrate
web: gunicorn -w 3 {{ project_name }}.wsgi --log-file -

Источники


Для создания сложного шаблона Django обратите внимание на ponee, легковесный Django-шаблон, готовый для использования с Heroku.

Вот такой небольшой, но интересный материал. Ждем ваши комментарии и приглашаем на бесплатный вебинар, в рамках которого мы подробно изучим, как тестировать проекты на Flask, писать и запускать тесты для проектов на Flask, создавать тестовые данные с помощью Faker и Factory Boy.