На этом сервисе пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.
Пример работы приложения http://foodgram.aveter77.site/recipes/
Полное описание API http://foodgram.aveter77.site/api/docs/
Образы на Dockerhub:
- Пользователь отправляет POST-запрос на эндпоинт
/api/users/
с параметрами
{
"email": "[email protected]",
"username": "username",
"first_name": "First_name",
"last_name": "Last_name",
"password": "password"
}
- Пользователь отправляет POST-запрос на эндпоинт
/api/auth/token/login/
, с параметрами
{
"password": "string",
"email": "string"
}
в ответе на запрос приходит auth_token
, затем этот токен передаётся в заголовке Authorizaton
каждого запроса
- Доступна главная страница.
- Доступна страница отдельного рецепта.
- Доступна форма авторизации.
- Доступна система восстановления пароля.
- Доступна форма регистрации.
- Доступна главная страница.
- Доступна страница другого пользователя.
- Доступна страница отдельного рецепта.
- Доступна страница «Мои подписки».
- Можно подписаться и отписаться на странице рецепта.
- Можно подписаться и отписаться на странице автора.
- При подписке рецепты автора добавляются на страницу «Мои подписки» и удаляются оттуда при отказе от подписки.
- Доступна страница «Избранное».
- На странице рецепта есть возможность добавить рецепт в список избранного и удалить его оттуда.
- На любой странице со списком рецептов есть возможность добавить рецепт в список избранного и удалить его оттуда.
- Доступна страница «Список покупок».
- На странице рецепта есть возможность добавить рецепт в список покупок и удалить его оттуда.
- На любой странице со списком рецептов есть возможность добавить рецепт в список покупок и удалить его оттуда.
- Есть возможность выгрузить файл (.txt) с перечнем и количеством необходимых ингредиентов для рецептов из «Списка покупок».
- Ингредиенты в выгружаемом списке не повторяются, корректно подсчитывается общее количество для каждого ингредиента.
- Доступна страница «Создать рецепт».
- Есть возможность опубликовать свой рецепт.
- Есть возможность отредактировать и сохранить изменения в своём рецепте.
- Есть возможность удалить свой рецепт.
- Доступна форма изменения пароля.
- Доступна возможность выйти из системы (разлогиниться).
- Python 3.7
- Django 2.2.16
- Django Rest Framework 3.12.4
- PostgreSQL 13.0
- gunicorn 20.0.4
- nginx 1.21.3
- Docker 20.10.17
- Docker Compose 1.29.2
Установите переменные среды, как в .env.example
.
cd infra/
docker-compose up -d
После запуска выполните команды:
docker-compose exec backend python manage.py migrate
docker-compose exec backend python manage.py createsuperuser
docker-compose exec backend python manage.py collectstatic --no-input
cd infra/
cat fixtures.json | docker-compose exec -T backend python manage.py loaddata --format=json -
docker-compose cp media_fixtures/recipes/ backend:/app/media/
Регистрация нового пользователя:
POST /api/users/
{
"email": "[email protected]",
"username": "username",
"first_name": "First_name",
"last_name": "Last_name",
"password": "password"
}
Получение токена:
POST /api/auth/token/login/
{
"password": "string",
"email": "string"
}
Получение списка всех пользователей:
GET /api/users/
Список рецептов:
GET /api/recipes/
Создать рецепт:
POST api/recipes/
{
"ingredients": [
{
"id": 1123,
"amount": 10
}
],
"tags": [
1,
2
],
"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAgMAAABieywaAAAACVBMVEUAAAD///9fX1/S0ecCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNoAAAAggCByxOyYQAAAABJRU5ErkJggg==",
"name": "string",
"text": "string",
"cooking_time": 1
}
{
"id": 0,
"tags": [
{
"id": 0,
"name": "Завтрак",
"color": "#E26C2D",
"slug": "breakfast"
}
],
"author": {
"email": "[email protected]",
"id": 0,
"username": "string",
"first_name": "Вася",
"last_name": "Пупкин",
"is_subscribed": false
},
"ingredients": [
{
"id": 0,
"name": "Картофель отварной",
"measurement_unit": "г",
"amount": 1
}
],
"is_favorited": true,
"is_in_shopping_cart": true,
"name": "string",
"image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
"text": "string",
"cooking_time": 1
}
Александр Николаев
MIT