Дана стаття стане в нагоді розробникам-початківцям, які мають досвід розробки, але все ще не до кінця розуміють, що повинно входити в проект.
Тут я зібрав невелику вичавку речей, які роблять на реальних проектах, таких як перевірка якості коду, запуск тестів, додавання пакетного менеджера і докера.
Крім того, стаття буде корисною й більш досвідченим фахівцям, які можуть не знати деякі особливості інструментів.
Створення проекту
Для початку створюємо папку, в якій розмістимо проектні файли.
mkdir django_example
Після цього встановлюємо Poetry для зберігання пакетів. Перевага Poetry над голим pip полягає в тому, що він створює два файли.
У першому зберігає тільки пакети, які розробник встановлює безпосередньо командою установки. У другому — зафіксовані версії і дочірні бібліотеки, на які не потрібно звертати увагу.
Рекомендуємо курс по темі
pip3 install Poetry
poetry init
poetry shell
poetry add Django
Далі створюємо проект через Джанго команду.
django-admin startproject django_example
Структура проекту
На даний момент структура буде виглядати наступним чином:
├── django_example
│ ├── django_example
│ │ ├── __init__.py
│ │ ├── asgi.py
│ │ ├── settings.py
│ │ ├── urls.py
│ │ └── wsgi.py
│ └── manage.py
├── poetry.lock
└── pyproject.toml
2 directories, 8 files
Стандартна структура проекту мені не особливо подобається для подальшої розробки, тому я раджу її трохи змінити таким чином:
├── poetry.lock
├── pyproject.toml
└── src
├── manage.py
├── server
│ ├── __init__.py
│ ├── asgi.py
│ ├── urls.py
│ └── wsgi.py
└── settings
├── base.py
└── develop.py
3 directories, 9 files
Окрема папка під settings потрібна для того, щоб зберігати різні настройки для різного оточення (dev, stage, prod).
Також обов'язково треба додати .gitignore в корінь проекту. Готових файлів .gitignore в інтернеті повно, як приклад: https://github.com/github/gitignore/blob/master/Python.gitignore.Але не забуваємо додати ігнор файлів вашої IDE.
Тести
Для запуску тестів можна використовувати стандартну команду Django в manage.py.
python manage.py test
Або, якщо хочеться, можна встановити додатково pytest, ця бібліотека, так само як і unittest, вміє запускати тести в стилі unittest, але для мене вона має трохи більший функціонал.
Перевірка коду
У кожному хорошому проекті використовують лінтери для перевірки якості коду, я раджу ставити базові:
- isort
Перевірка порядку імпорту модулів
- prospector
Перевірка коду на предмет синтаксичних і логічних помилок
І також хочу звернути вашу увагу на бібліотеку black https://github.com/psf/black.
Вона не перевіряє код, а форматує за регламентом pep8.
Docker
Далі для оптимізації розробки і постачання програмного коду на сервера використовуємо Docker.
Трохи нижче навів два приклади Dockerfile і docker-compose.yml. Немає сенсу перераховувати, що робить кожен рядок, скажу тільки одне — в ports краще завжди вказувати на вхід 127.0.0.1, щоб тільки з локального комп'ютера запити могли летіти в Docker.
Dockerfile
FROM python:3
ENV PYTHONUNBUFFERED 1
WORKDIR /code
COPY . .
RUN pip install -U pip && \
pip install poetry && \
poetry config virtualenvs.create false && \
poetry install --no-dev
docker-compose.yml
version: “3”
services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=password
ports:
- "127.0.0.1:5432:5432"
web:
build: .
entrypoint: ./entrypoint.sh
volumes:
- .:/code
ports:
- "127.0.0.1:8000:8000"
env_file:
- .env
depends_on:
- db
Makefile
І вишенькою на торті я завжди додаю в кожен проект Makefile: https://gist.github.com/valeriiduz/180d1e02af03f21fcd38281720c4543f.
Принадність його полягає в тому, що він дозволяє скоротити довгі команди Докера. При цьому встановлювати його не треба, оскільки він входить в поставку будь-лінукс системи.
Як приклад, щоб запустити Докер контейнери, потрібно прописати наступну команду:
docker-compose up -d
Можна записати цю команду в Makefile:
start: ## Start all or c=<name> containers in background
docker-compose -f $(or $(DOCKER_COMPOSE_FILE), docker-compose.yml) up -d $(c)
І далі в консолі можна просто прописувати:
make start