Skip to content

Foodgram это сервис для публикации кулинарных рецептов с подписками на авторов и избранными рецептами, с возможностью формирования списка продуктов для нужных рецептов. Дипломный проект Яндекс Практикум.

Notifications You must be signed in to change notification settings

juliana-str/foodgram-project-react

Repository files navigation

foodgram_workflow

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


1. Описание

Проект "Продуктовый помошник" (Foodgram) - сайт, на котором пользователи могут:

  • регистрироваться
  • создавать свои рецепты и управлять ими (корректировать\удалять)
  • просматривать рецепты других пользователей
  • добавлять рецепты других пользователей в "Избранное" и в "Список покупок"
  • подписываться на других пользователей
  • скачать список ингредиентов для рецептов, добавленных в "Список покупок"

https://foodgramproject.myddns.me


2. Установка Docker (на платформе Ubuntu)

Проект поставляется в четырех контейнерах Docker (db, frontend, backend, nginx).
Для запуска необходимо установить Docker и Docker Compose.
Подробнее об установке на других платформах можно узнать на официальном сайте.

Для начала необходимо скачать и выполнить официальный скрипт:

apt install curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

При необходимости удалить старые версии Docker:

apt remove docker docker-engine docker.io containerd runc 

Установить пакеты для работы через протокол https:

apt update
apt install \
  apt-transport-https \
  ca-certificates \
  curl \
  gnupg-agent \
  software-properties-common -y 

Добавить ключ GPG для подтверждения подлинности в процессе установки:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

Добавить репозиторий Docker в пакеты apt и обновить индекс пакетов:

add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 
apt update

Установить Docker(CE) и Docker Compose:

apt install docker-ce docker-compose -y

Проверить что Docker работает можно командой:

systemctl status docker

Подробнее об установке можно узнать по ссылке.


3. База данных и переменные окружения

Проект использует базу данных PostgreSQL.
Для подключения и выполненя запросов к базе данных необходимо создать и заполнить файл ".env" с переменными окружения в папке "./infra/".

Шаблон для заполнения файла ".env":

DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
DB_HOST=db
DB_PORT=5432
SECRET_KEY='Здесь указать секретный ключ'
ALLOWED_HOSTS='Здесь указать имя или IP хоста' (Для локального запуска - 127.0.0.1)

4. Команды для запуска

Перед запуском необходимо склонировать проект:

git clone git@github.com:juliana-str/foodgram-project-react.git

Cоздать и активировать виртуальное окружение:

python -m venv venv
Linux: source venv/bin/activate
Windows: source venv/Scripts/activate

И установить зависимости из файла requirements.txt:

python3 -m pip install --upgrade pip
pip install -r requirements.txt

Далее необходимо собрать образы для фронтенда и бэкенда.
Из папки "./backend/" выполнить команду:

docker build -t username/foodgram_backend .

Из папки "./frontend/" выполнить команду:

docker build -t username/foodgram_frontend .

Из папки "./infra/" выполнить команду:

docker build -t username/foodgram_gateway .

После создания образов можно создавать и запускать контейнеры. Из папки "./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

Теперь доступность проекта можно проверить по адресу http://localhost/


5. Заполнение базы данных

С проектом поставляются данные об ингредиентах.
Заполнить базу данных ингредиентами и тегами можно выполнив следующую команду из папки "./backend/":

docker-compose exec backend python manage.py load_data

6. Примеры запросов к api

Регистрация

Отправить POST-запрос на добавление нового пользователя на эндпоинт /api/users/
с параметрами:
 - email
 - username
 - first_name
 - last_name
 - password

Пример запроса:

{
    "email": "kisa@yandex.ru",
    "username": "kisa.mura",
    "first_name": "Кира",
    "last_name": "Муравьева",
    "password": "mnjggffdfdf"
}

Аутентификация

  1. Отправить POST-запрос на получение токена на эндпоинт /api/auth/token/login/.

Пример запроса:

{
    "email": "kisa@yandex.ru",
    "password": "mnjggffdfdf"
}
  1. Отправить POST-запрос на удаление токена на эндпоинт /api/auth/token/logout/.

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

POST-запрос пользователя на создание рецепта:

  1. Пример запроса:
{
   "id": 1,
   "name": "Блины",
   "tags": 1,
   "ingredients": [
       {
          "id": 8,
          "amount": 10
       },
       {
          "id": 9,      
          "amount": 2      
       }
       ],
   "image": Null,     
   "text": "Ароматные блинчики!",     
   "cooking_time": 35     
  }
  

7. Техническая информация

Стек технологий: Python 3, Django, Django Rest, React, Docker, PostgreSQL, nginx, gunicorn, Djoser, github-actions, CI-CD.

Веб-сервер: nginx (контейнер nginx)
Frontend фреймворк: React (контейнер frontend)
Backend фреймворк: Django (контейнер backend)
API фреймворк: Django REST (контейнер backend)
База данных: PostgreSQL (контейнер db)

Веб-сервер nginx перенаправляет запросы клиентов к контейнерам frontend и backend, либо к хранилищам (volume) статики и файлов.
Контейнер nginx взаимодействует с контейнером backend через gunicorn.
Контейнер frontend взаимодействует с контейнером backend посредством API-запросов.


8. Об авторе

Стрельникова Юлиана Сергеевна
Python-разработчик (Backend)
Россия, г. Санкт-Петербург
E-mail: julianka.str@yandex.ru
Telegram: @JulianaStr

About

Foodgram это сервис для публикации кулинарных рецептов с подписками на авторов и избранными рецептами, с возможностью формирования списка продуктов для нужных рецептов. Дипломный проект Яндекс Практикум.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published