Продуктовый помощник. Скромный диплом курса python Я.Парктикум
❗️ Проект переведен в архив и не обновляется ❗️
foodgram.kiryanov.ru
Адрес развернутого проекта:Что можно сделать
- регистрироваться (пользователь доступен сразу после регистрации)
- чужие рецепты — смотреть, добавлять в избранное или в корзину покупок
- создавать и редактировать свои рецепты
- подписываться на другого автора
- загружать список ингредиентов для рецептов в корзине (PDF)
- есть админка, где администратор может создавать новые сущности: меры измерения, теги, ингредиенты, подписывать пользователей, добавлять в избранное и прочее
Из чего состоит
Фронт: написан на react, подготовлен разработчиками курса.
Задача бэка — написать API по подготовленной документации. Настроить CI/CD.
Для удобства добавил:
- генерацию тестовых данных
- management команды для заполнения тестовыми данными
- покрытие тестами
- интеграция с codecov
- pre-commit и хуки для него: проверка линтерами, генерация зависимостей
- вместо контейнера nginx используется swag. Так безопаснее и сразу с HTTPS
Технологии и требования
Python 3.9+
Django 3.2
Django REST Framework 3.12
Django Filters
Factory Boy
Poetry
Docker
Swag
Структура проекта
├── README.md
├── backend
├── docs
├── frontend
└── infra
- ├ backend : здесь бэк. Управление зависимостями - Poetry (об этом ниже)
- ├ docs : файлы с изначальной документацией. Подключаются при деплое проекта
- ├ frontend : фронт. Тут код проекта и уже сбилженный билд для добавления в контейнер
- └ infra : файлы docker-compose для запуска в проде, для подготовки фронта
Как развернуть проект на сервере
На сервере должен быть установлен Docker, docker-compose совместимых версий
-
Склонируйте папку проекта на сервер
git clone git@github.com:nkiryanov/foodgram-project-react.git cd foodgram-project-react
-
Задайте переменные окружения. Какие именно переменные нужны и как их задавать в папке '.envs example' Обратите внимание, переменные нужно класть в папку .envs в папку infra/production
Секретный ключ удобно сгенерировать локально. Если перейти в папку backend и выполнить командуmake gen-secretkey
, то будет показан на экране.└── infra └── production ├── .envs │ ├── .django │ ├── .postgre ├── .envs\ example │ ├── .django │ ├── .postgre ├── docker-compose.yaml └── swag_nginx.conf
-
В github создайте environment назвав его "production_environment" и задайте ключи доступа к github и серверу
- DOCKER_PASSWORD
- DOCKER_USERNAME
- HOST
- SSH_KEY
- USERNAME
- SITE_URL - Адрес сайта, используется Swag для сертификта SSL
- SSL_EMAIL - Swag настроен для ZeroSSL. Почта это логин в ZeroSSL
-
При следующем пуше в ветку "master", если тесты пройдены успешно проект будет выгружен на сервер и перезапущен
-
При первом запуске создать суперюзера:
docker-compose exec django bash python manage.py createsuperuser
-
Если потребуется заполнение тестовыми данными, смотри ниже
Как разрабатывать или вносить изменения в бэк
Зависимости управляются poetry. Детальное описание в документации poetry. Файлы requirements генерируются через pre-commit хуки. Редактировать вручную не требуется.
- Склонируйте проект, перейдите в папку backend
git clone git@github.com:nkiryanov/foodgram-project-react.git cd foodgram-project-react cd backend
- Убедитесь что poetry установлен. Активируйте виртуальное окружение. Установите зависимости
poetry shell poetry install
- В IDE скорее всего потребуется указать путь до интерпретатора
poetry env info --path
- Установить pre-commit хуки
pre-commit install --all
- Локальные настройки не требуют переменных окружения. Если они потребуются:
- раскоментируйте подключение .env в файле настроек config.settings.local
- добавьте файл .env в корень папки backend
- Локальные настройками предполагают БД postgres. Чтоб не устанавливать отдельное приложении используйте local.yaml для создания докер образа.
docker-compose -f local.yaml up -d
- Остановка, удаление и все остальные команды как с любым контейнером docker
- Остановить контейнер с БД:
docker-compose -f local.yaml down
- Остановить контейнер с БД удалив данные:
docker-compose -f local.yaml down --volumes
- Остановить контейнер с БД:
Полезные команды:
- добавить пакет в список зависимостей для Production
poetry add {название пакета}
- установить пакет в окружение разработки (dev):
poetry add --dev {название пакета}
- обновить список зависимостей:
poetry update
- выполнить pre-commit хуки локально:
pre-commit install --all
- обновить версии репозиториев с pre-commit хуками:
pre-commit autoupdate
Как заполнить тестовыми данными.
Предполагается, что у вас уже установлено рабочее окружение и зависимости.
- Заполнить фикстуры с ингредиентами
python manage.py loaddata data/ingredients_updated.json
- Создать пользователей. Первой трете пользователей будут созданы подписки на друг друга
python manage.py fill_users 50
- Создать рецепты, а также связанные объекты добавления в избранное или в корзину покупок (для 1/3 рецептов). Обратите внимание на ключ realimages. Он необязательный, но если указан картинки для рецептов будут загружаться из https://picsum.photos
python manage.py fill_recipes 120 --realimages
Для генерации тестовых данных используется factory_boy. Если это production сервере, то этого пакета нет в зависимостях, нужно установить:
docker-compose exec django bash
pip install factory_boy
Запуск тестов
Тесты используют unittest, но удобно запускать и менеджерить через pytest
pytest