Типовой шаблон проекта на Django

2097 0

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

Как всегда я использую свой стандартный стэк: Debian/Ubuntu + Python 3.* + PostgreSQL + NGINX + virtualenv + Django

Структура моих проектах основывается на рекомендациях Two Scoops of Django 1.11 с учетом моего стека и выглядит следующим образом:

apps
    app1
        templates
            index.html
            ...
        app1_files
        ...
    app2
        app2_files
        ...
deploy
    django_nginx.ini # ini файл для uwsgi процессов
    django_wsgi.py # wsgi файл для проекта
    project.nginx # NGINX настройки виртуального хоста для проекта
    uwsgi_project.conf # конфигурационный файл для supervisor
    uwsgi_project.sh # bash скрипт для запуска процессов через супервизор
project*
    settings # Настройки проекта с выделенными локальными переменными и настройками
        base.py 
        local.py
        local_envs.py
    project_files
    ...
public
    media
       media_files
       ...
    static
       collectstatic_files
       ...
requirements
    debug.txt
    product.txt
static # Статика проекта
    css
    fonts
    img
    js
templates # Шаблоны проекта
    includes
        include.html
        ...
    base.html
    index.html
.gitignore
manage.py
README.md

* основную папку проекта я настраиваю как обычное приложение для того чтобы можно было создавать централизованные команды менеджмента и задачи на весь проект.

Долгое время оттачивал для себя эту структуру и когда наконец понял, что она состоялась запилил типовой шаблон для быстрого разворачивания этой структуры под свой стэк.

Для создания шаблона использовал cookiecutter и настроил его таким образом чтобы сразу можно было видеть эффект установки по runserver.

Полученный в итоге шаблон позволяет поднимать пустой проект за минимум времени (если не сравнивать конечно с Докером ;)) и существенно экономит мне время.

Итак для разворачивания проекта из шаблона необходимо произвести следующие манипуляции:

1. Разворачиваем новое виртуальное окружение под свой проект:

python3 -m venv --system-site-packages env


2. Устанавливаем cookiecutter:

pip install cookiecutter

3. Клонируем шаблон из репозитория

git clone https://bitbucket.org/AOwlman/dj_templ

4. Запускаем установку шаблона

cookiecutter dj_templ

Или делаем 3 и 4й шаги через cookiecutter без клонирования:

cookiecutter https://AOwlman@bitbucket.org/AOwlman/dj_templ.git

В процессе разворачивания cookiecutter спросит:

    - env_name: Окружение для нового проекта. То в котором вы разворачиваете проект. Обязательное поле

    - project_name: название проекта. Так будет назван модуль Python, поэтому выбирайте валидное имя.

    - user_name: Пользователь в /home которого располагается проект с его окружением. Обязательное поле

    - admin_name и admin_email: контакты администратора. Будут использованы в настройке Django ADMINS.

    - version: версия с которой начинать проект.

    - production_host: адрес боевого сервера.

    - site_name: адрес сайта. Используется в ALLOWED_HOSTS. Обязательное поле

    - local_db_name, local_db_user, local_db_password: реквизиты локальной БД Postgres.

    - secret_key: Секретный ключ Django.

    - ... и другие настройки из файла cookiecutter.json


При заполнении Обязательных полей проект будет запускаться runserver с установками по умолчанию. Например:

./manage.py runserver 0.0.0.0:8000

Соответственно по указанному Вами site_name:8000 будет доступна первая страница проекта

Комментарии

Контактные данные

 Россия, г. Москва