На сервисе Recipes Assistant пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд. В ходе реализации проекта мною были реализованы:
- бэкенд проекта на Django REST Framework (реализовано API по готовой спецификации)
- созданы Dockerfile для контейнера бэкенда
- создана конфигурация сервера nginx
- созданы конфигурации для запуска docker контейнеров для базы данных (PostgreSQL), для HTTP-сервера nginx, для фронтенда и бэкенда (файл docker-compose)
Проект базируется на следующих технологиях:
- Python 3.8
- Django 3.2.11
- Django REST Framework 3.13.1
- PostgreSQL
- django-filter 21.1
- Pillow 9.0 (для загрузки изображений)
- reportlab 3.6.8 (для формирования документа в формате PDF)
- Poetry (для разработки проекта в отдельном окружении и работы с зависимостями проекта)
- Git (GitHub) (для сохранения и отслеживания изменений кода)
- Линтер Flake8 (для проверки соответствия кода стандарту PEP8)
- Docker (для запуска проекта в контейнерах)
- Gunicorn
- Nginx
- Установите Docker и Docker-compose
sudo apt install docker.io
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
-
Скопируйте файлы Docker-compose.yml и nginx.conf из папки infra репозитория https://github.com/SunnyInHouse/recipes-assistant Также необходимо скопировать файл ingredients.csv из папки data указанного репозитория.
-
Создайте файл .env в папке со скопированными из репозитория файлами со следующим содержимым:
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
- Перейдите с папку со скопированными из репозитория файлами и запустите проект:
sudo docker-compose up -d --build
- Соберите статику и проведите миграции: - id контейнера backend
docker-compose exec <CONTAINER ID> python3 manage.py collectstatic --noinput
docker exec -it <CONTAINER ID> bash
python manage.py makemigrations
python manage.py migrate --noinput
- Создайте суперпользователя для сайта:
docker exec -it <CONTAINER ID> bash
python manage.py createsuperuser
- загрузите список ингредиентов на сайт:
docker cp ingredients.csv <CONTAINER ID>:/code
docker exec -it <CONTAINER ID> bash
python manage.py load_ingridients /code/ingredients.csv
- зайдите в админку сайта и создайте теги рецептов.
POST http://localhost:8000/api/users/ - регистрация POST http://localhost:8000/api/auth/token/login - создание токена GET http://localhost:8000/api/users/ - Просмотр информации о пользователях
POST http://localhost:8000/api/users/set_password/ - Изменение пароля GET http://localhost:8000/api/users/4/subscribe/ - Подписаться на пользователя DEL http://localhost:8000/api/users/4/subscribe/ - Отписаться от пользователя
POST http://localhost:8000/api/recipes/ - Создать рецепт GET http://localhost:8000/api/recipes/ - Получить рецепты GET http://localhost:8000/api/recipes// - Получить рецепт по id DEL http://localhost:8000/api/recipes// - Удалить рецепт по id
GET http://localhost:8000/api/recipes//favorite/ - Добавить рецепт в избранное DEL http://localhost:8000/api/recipes//favorite/ - Удалить рецепт из избранного
GET http://localhost:8000/api/users//subscribe/ - Подписаться на пользователя DEL http://localhost:8000/api/users//subscribe/ - Отписаться от пользователя
GET http://localhost:8000/api/ingredients/ - Получить список всех ингредиентов
GET http://localhost:8000/api/tags/ - Получить список всех тегов
GET http://localhost:8000/api/recipes//shopping_cart/ - Добавить рецепт в корзину DEL http://localhost:8000/api/recipes//shopping_cart/ - Удалить рецепт из корзины