Платформа для публикации рецептов. Пользователи могут публиковать свои рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Зарегистрированным пользователям также доступен список покупок, который позволяет создавать список продуктов, которые нужно купить для приготовления выбранных блюд.
-
Python 3.12+
-
Django 4.2
-
Django REST Framework 3.14
-
Djoser
-
PostgreSQL
-
Docker, docker compose
-
Nginx, Gunicorn
-
React
-
Postman Collection
-
Git и GitHub
Клонировать репозиторий и перейти в него в командной строке:
git clone git@github.com:0den7/foodgram.gitcd foodgramПерейти в папку backend/, создать и активировать виртуальное окружение:
cd backend/python -m venv venvsource venv/Scripts/activateУстановить зависимости из файла requirements.txt:
python -m pip install --upgrade pippip install -r requirements.txtСоздать файл .env в корне проекта (см. .env.example).
Применить миграции:
python manage.py migrateЗапустить проект:
python manage.py runserverПроект будет доступен по адресу http://127.0.0.1:8000/.
Создать файл .env в корне проекта (см. .env.example).
Из корня проекта перейти в папку infra/ и выполнить команду:
docker compose up -dВыполнить миграции, собрать статику, загрузить ингредиенты и создать суперюзера:
docker compose exec backend python manage.py migratedocker compose exec backend python manage.py collectstatic --noinputdocker compose exec backend sh -c "cp -r /app/static/. /backend_static/static/"docker compose exec backend python manage.py load_ingredientsdocker compose exec backend python manage.py createsuperuserПроект будет доступен по адресу http://localhost/.
Для запуска на сервере используется docker-compose.production.yml:
docker compose -f docker-compose.production.yml up -dПроект развёрнут на удалённом сервере и доступен по адресу https://foodgram.3utilities.com.
В проекте есть management-команда для импорта данных из JSON-файла:
python manage.py load_ingredientsФайл для импорта находятся в папке /foodgram/data/.
После запуска проекта документация доступна по адресу:
http://localhost/api/docs/
POST https://foodgram.3utilities.com/api/users/
Content-Type: application/json
{
"email": "user@example.com",
"username": "new_user",
"first_name": "Иван",
"last_name": "Иванов",
"password": "SecurePass123"
}{
"email": "user@example.com",
"id": 1,
"username": "new_user",
"first_name": "Иван",
"last_name": "Иванов"
}POST https://foodgram.3utilities.com/api/auth/token/login/
Content-Type: application/json
{
"email": "user@example.com",
"password": "SecurePass123"
}{
"auth_token": "string"
}POST https://foodgram.3utilities.com/api/recipes/
Authorization: Token <auth_token>
Content-Type: application/json
{
"ingredients": [
{"id": 1, "amount": 10}
],
"tags": [
1
],
"image": "data:image/png;base64,iVBORw0KGgoAAAANS...",
"name": "Борщ",
"text": "Сварить овощи, добавить мясо...",
"cooking_time": 60
}{
"id": 1,
"tags": [
{"id": 1, "name": "Завтрак", "slug": "breakfast"}
],
"author": {
"email": "user@example.com",
"id": 1,
"username": "new_user",
"first_name": "Иван",
"last_name": "Иванов",
"is_subscribed": false,
"avatar": "https://foodgram.3utilities.com/media/users/image.png"
},
"ingredients": [
{"id": 1, "name": "Картофель", "measurement_unit": "г", "amount": 10}
],
"is_favorited": false,
"is_in_shopping_cart": false,
"name": "Борщ",
"image": "https://foodgram.3utilities.com/media/recipes/images/image.png",
"text": "Сварить овощи, добавить мясо...",
"cooking_time": 60
}GET https://foodgram.3utilities.com/api/recipes/download_shopping_cart/
Authorization: Token <auth_token>В ответ вернётся файл shopping_cart.txt с перечнем и количеством ингредиентов.
- Гость (анонимный пользователь): просмотр рецептов на главной, просмотр отдельных страниц рецептов, просмотр страниц пользователей, создание аккаунта, фильтрация рецептов по тегам
- Авторизованный пользователь: вход в систему под своим логином и паролем, выход из системы, создание, редактирование и удаление собственных рецептов, просмотр страниц пользователей, просмотр рецептов на главной, просмотр отдельных страниц рецептов, работа с персональным списком покупок: добавление и удаление любых рецептов, выгрузка файла с количеством необходимых ингредиентов для рецептов из списка покупок, работа с персональным списком избранного: добавление в него рецептов или удаление их, просмотр своей страницы избранных рецептов, подписка на публикации авторов рецептов и отмена подписки, просмотр своей страницы подписок
- Администратор: все права авторизованного пользователя + изменение пароля любого пользователя, создание, блокировка и удаление аккаунтов пользователей, редактирование и удаление любых рецептов, добавление, удаление и редактирование ингредиентов, добавление, удаление и редактирование тегов (через админ-панель Django)
Юрий Кудряшов
GitHub: 0den7