Skip to content

MIshaTilt/foodgram-st

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Продуктовый помощник Foodgram

🍱 Описание проекта

Проект «Фудграм» — сайт, на котором пользователи могут публиковать свои рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Зарегистрированным пользователям также доступен сервис «Список покупок», который позволяет создавать список продуктов для выбранных блюд и скачивать его.

🛠 Технологии

Python Django PostgreSQL React Nginx Docker

🚀 Полный запуск проекта (Docker)

Для полноценного запуска (бэкенд, фронтенд, база данных, nginx) используется Docker Compose.

1. Подготовка

Установите Docker Desktop:

Клонируйте репозиторий:

git clone git@github.com:your-username/foodgram-st.git
cd foodgram-st

2. Настройка окружения

В папке infra/ создайте файл .env. Пример наполнения:

# Django
SECRET_KEY='...'
DEBUG=False
ALLOWED_HOSTS=localhost,127.0.0.1,backend

# Database
POSTGRES_DB=foodgram-db
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432

3. Запуск контейнеров

Из папки с docker-compose.yml выполните команду:

docker compose up -d --build

4. Список запущенных контейнеров

После запуска команда docker container ls покажет следующую структуру:

  • foodgram-proxy (Nginx) — входная точка приложения (порт 80)
  • foodgram-backend (Django + Gunicorn) — API и админка
  • foodgram-frontend — статический контейнер с React (завершает работу после сборки)
  • foodgram-db (PostgreSQL) — база данных

⚙️ Настройка после запуска

Эти команды выполняются один раз после первого запуска контейнеров.

1. Загрузка ингредиентов

Загружаем список ингредиентов в базу данных из JSON-файла (используется кастомная команда):

docker compose exec backend python manage.py load_ingredients

2. Создание администратора

Создаем суперпользователя для доступа в админку:

docker compose exec backend python manage.py createsuperuser

Примеры запросов к API

Ниже приведены примеры использования основных эндпоинтов API.

1. Регистрация нового пользователя

Запрос для создания нового пользователя в системе. Не требует аутентификации.

Запрос:

curl -X POST \
  http://127.0.0.1:8000/api/users/ \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "user@example.com",
    "username": "string",
    "first_name": "string",
    "last_name": "string",
    "password": "strong_password"
}'

Ответ (Статус 201 Created):```json { "email": "user@example.com", "id": 1, "username": "string", "first_name": "string", "last_name": "string" }


---

#### 2. Получение токена аутентификации

После регистрации пользователь может получить токен для доступа к защищенным эндпоинтам.

**Запрос:**
```bash
curl -X POST \
  http://127.0.0.1:8000/api/auth/token/login/ \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "user@example.com",
    "password": "strong_password"
}'

Ответ (Статус 200 OK):

{
    "auth_token": "9a4a7282155b5b5f2c27b0b61234567890abcdef"
}

3. Создание нового рецепта

Аутентифицированный пользователь может создать новый рецепт, передав все необходимые данные, включая ингредиенты.

Запрос:

curl -X POST \
  http://127.0.0.1:8000/api/recipes/ \
  -H 'Authorization: Token 9a4a7282155b5b5f2c27b0b61234567890abcdef' \
  -H 'Content-Type: application/json' \
  -d '{
    "ingredients": [
        { "id": 1, "amount": 100 },
        { "id": 5, "amount": 2 }
    ],
    "tags": [1],
    "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAgMAAABieywaAAAACVBMVEUAAAD///9fX1/S0ecCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNoAAAAggCByxOyYQAAAABJRU5ErkJggg==",
    "name": "Яичница с помидорами",
    "text": "Подробное описание рецепта...",
    "cooking_time": 10
}'

В поле image передается изображение в формате Base64.

Ответ (Статус 201 Created): Возвращается полная информация о созданном рецепте.


4. Получение списка рецептов с фильтрацией

Получение списка всех рецептов. Эндпоинт доступен всем пользователям. Аутентифицированные пользователи могут применять фильтры, например, для отображения только избранных рецептов.

Запрос:

curl -X GET \
  'http://127.0.0.1:8000/api/recipes/?is_favorited=1&author=2' \
  -H 'Authorization: Token 9a4a7282155b5b5f2c27b0b61234567890abcdef'

Этот запрос вернет рецепты автора с id=2, которые текущий пользователь добавил в избранное.

Ответ (Статус 200 OK):

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 15,
            "name": "Омлет с сыром",
            "image": "http://127.0.0.1:8000/media/recipes/images/omelet.png",
            "cooking_time": 15,
            // ... другие поля
        }
    ]
}

5. Скачивание списка покупок

Аутентифицированный пользователь может скачать текстовый файл со списком всех ингредиентов из рецептов, добавленных в его корзину.

Запрос:

curl -X GET \
  http://127.0.0.1:8000/api/recipes/download_shopping_cart/ \
  -H 'Authorization: Token 9a4a7282155b5b5f2c27b0b61234567890abcdef' \
  --output shopping_list.txt

Команда --output shopping_list.txt сохранит результат в файл.

Ответ (Статус 200 OK): Браузер или cURL скачают файл shopping_list.txt со следующим содержимым:

Список покупок:

• Мука (г) — 100
• Помидор (шт) — 2
• Сыр (г) — 50
• Яйцо (шт) — 2

🌐 Адреса проекта

Адрес Описание
http://localhost/ Главная страница сайта
http://localhost/admin/ Панель администратора

Связь с автором: Tg: @Fgcvvv mdsv@inbox.ru

About

foodgram-st

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors