«Продуктовый помощник» - это сайт, на котором пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Сервис «Список покупок» позволяет пользователям создавать список продуктов, которые нужно купить для приготовления выбранных блюд.
- Рецепты на всех страницах сортируются по дате публикации (новые — выше)
- Работает фильтрация по тегам, в том числе на странице избранного и на странице рецептов одного автора
- Работает пагинатор (в том числе при фильтрации по тегам)
- Для авторизованных пользователей:
- Доступна главная страница
- Доступна страница другого пользователя
- Доступна страница отдельного рецепта
- Доступна страница «Мои подписки»:
- Можно подписаться и отписаться на странице рецепта
- Можно подписаться и отписаться на странице автора
- При подписке рецепты автора добавляются на страницу «Мои подписки» и удаляются оттуда при отказе от подписки
- Доступна страница «Избранное»:
- На странице рецепта есть возможность добавить рецепт в список избранного и удалить его оттуда
- На любой странице со списком рецептов есть возможность добавить рецепт в список избранного и удалить его оттуда
- Доступна страница «Список покупок»:
- На странице рецепта есть возможность добавить рецепт в список покупок и удалить его оттуда
- На любой странице со списком рецептов есть возможность добавить рецепт в список покупок и удалить его оттуда
- Есть возможность выгрузить файл (.pdf) с перечнем и количеством необходимых ингредиентов для рецептов из «Списка покупок»
- Ингредиенты в выгружаемом списке не повторяются, корректно подсчитывается общее количество для каждого ингредиента
- Доступна страница «Создать рецепт»:
- Есть возможность опубликовать свой рецепт
- Есть возможность отредактировать и сохранить изменения в своём рецепте
- Есть возможность удалить свой рецепт
- Доступна и работает форма изменения пароля
- Доступна возможность выйти из системы (разлогиниться)
- Для неавторизованных пользователей:
- Доступна главная страница
- Доступна страница отдельного рецепта
- Доступна и работает форма авторизации
- Доступна и работает система восстановления пароля
- Доступна и работает форма регистрации
- Администратор и админ-зона:
- Все модели выведены в админ-зону
- Для модели пользователей включена фильтрация по имени и email
- Для модели рецептов включена фильтрация по названию, автору и тегам
- На админ-странице рецепта отображается общее число добавлений этого рецепта в избранное
- Для модели ингредиентов включена фильтрация по названию
- Python 3.8.8
- Django 2.2.16
- Django Rest Framework 3.13.1
- PostgreSQL 13.0
- gunicorn 20.0.4
- nginx 1.21.3
Данные для доступа в админ-панель:
email: admin@yandex.ru
password: admin
Для просмотра документации к API перейдите по адресу:
Клонируйте репозиторий и перейдите в него в командной строке:
git clone https://github.com/nickolaEO/foodgram-project-react.git && cd foodgram-project-react
Перейдите в директорию с файлом Dockerfile и запустите сборку образа:
cd backend && docker build -t <DOCKER_USERNAME>/foodgram:<tag> .
Перейдите в директорию с файлом docker-compose.yaml:
cd ../infra
Создайте .env файл:
#.env
DB_ENGINE=<django.db.backends.postgresql>
DB_NAME=<имя базы данных postgres>
DB_USER=<пользователь бд>
DB_PASSWORD=<пароль>
DB_HOST=<db>
DB_PORT=<5432>
SECRET_KEY=<секретный ключ проекта django>
Запустите контейнеры:
docker-compose up -d --build
После успешного запуска контейнеров выполните миграции в проекте:
docker-compose exec backend python manage.py makemigrations users
docker-compose exec backend python manage.py makemigrations recipes
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
Наполните БД заготовленными данными:
- Ингредиенты:
docker-compose exec backend python manage.py importcsv --filename ingredients.csv --model_name Ingredient --app_name recipes
- Теги:
docker-compose exec backend python manage.py importcsv --filename tags.csv --model_name Tag --app_name recipes
Создайте дамп (резервную копию) базы данных:
docker-compose exec backend python manage.py dumpdata > fixtures.json
Для остановки контейнеров и удаления всех зависимостей воспользуйтесь командой:
docker-compose down -v
GET: http://127.0.0.1:8000/api/users/
Пример ответа:
{
"count": 123,
"next": "http://127.0.0.1:8000/api/users/?page=4",
"previous": "http://127.0.0.1:8000/api/users/?page=2",
"results": [
{
"email": "testuser@yandex.ru",
"id": 0,
"username": "test.user",
"first_name": "Test",
"last_name": "User",
"is_subscribed": false
}
]
}
POST: http://127.0.0.1:8000/api/users/
Тело запроса:
{
"email": "testuser@yandex.ru",
"username": "test.user",
"first_name": "Test",
"last_name": "User",
"password": "Qwerty123"
}
Пример ответа:
{
"email": "testuser@yandex.ru",
"id": 0,
"username": "test.user",
"first_name": "Test",
"last_name": "User"
}
GET: http://127.0.0.1:8000/api/recipes/
Пример ответа:
{
"count": 123,
"next": "http://127.0.0.1:8000/api/recipes/?page=4",
"previous": "http://127.0.0.1:8000/api/recipes/?page=2",
"results": [
{
"id": 0,
"tags": [
{
"id": 0,
"name": "Завтрак",
"color": "#E26C2D",
"slug": "breakfast"
}
],
"author": {
"email": "testuser@yandex.ru",
"id": 0,
"username": "test.user",
"first_name": "Test",
"last_name": "User",
"is_subscribed": false
},
"ingredients": [
{
"id": 0,
"name": "Картофель отварной",
"measurement_unit": "г",
"amount": 1
}
],
"is_favorited": true,
"is_in_shopping_cart": true,
"name": "string",
"image": "http://127.0.0.1:8000/media/recipes/images/image.jpeg",
"text": "string",
"cooking_time": 1
}
]
}
MIT
Free Software