1. Описание
8. Об авторе
Проект "Продуктовый помошник" (Foodgram) - сайт, на котором пользователи могут:
- регистрироваться
- создавать свои рецепты и управлять ими (корректировать\удалять)
- просматривать рецепты других пользователей
- добавлять рецепты других пользователей в "Избранное" и в "Список покупок"
- подписываться на других пользователей
- скачать список ингредиентов для рецептов, добавленных в "Список покупок"
https://foodgramproject.myddns.me
Проект поставляется в четырех контейнерах 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
Подробнее об установке можно узнать по ссылке.
Проект использует базу данных 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)
Перед запуском необходимо склонировать проект:
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/
С проектом поставляются данные об ингредиентах.
Заполнить базу данных ингредиентами и тегами можно выполнив следующую команду из папки "./backend/":
docker-compose exec backend python manage.py load_data
Регистрация
Отправить POST-запрос на добавление нового пользователя на эндпоинт /api/users/
с параметрами:
- email
- username
- first_name
- last_name
- password
Пример запроса:
{
"email": "kisa@yandex.ru",
"username": "kisa.mura",
"first_name": "Кира",
"last_name": "Муравьева",
"password": "mnjggffdfdf"
}
Аутентификация
- Отправить POST-запрос на получение токена на эндпоинт /api/auth/token/login/.
Пример запроса:
{
"email": "kisa@yandex.ru",
"password": "mnjggffdfdf"
}
- Отправить POST-запрос на удаление токена на эндпоинт /api/auth/token/logout/.
Примеры запросов:
POST-запрос пользователя на создание рецепта:
- Пример запроса:
{
"id": 1,
"name": "Блины",
"tags": 1,
"ingredients": [
{
"id": 8,
"amount": 10
},
{
"id": 9,
"amount": 2
}
],
"image": Null,
"text": "Ароматные блинчики!",
"cooking_time": 35
}
Стек технологий: 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-запросов.
Стрельникова Юлиана Сергеевна
Python-разработчик (Backend)
Россия, г. Санкт-Петербург
E-mail: julianka.str@yandex.ru
Telegram: @JulianaStr