Foodgram - онлайн-сервис, позволяющий просматривать и создавать рецепты блюд, подписываться на любимых авторов, добавлять рецепты в избранное и список покупок.
- Python 3.7
- Django Rest Framework 3.2.18
- Djoser 2.1.0
- Reportlab 3.6.12
- Postman (графическая программа для тестирования API)
- PostgreSQL (система управления базами данных)
- Docker (программная платформа контейнеризации)
- Docker Compose (средство для определения и запуска приложений Docker с несколькими контейнерами)
- Nginx (веб-сервер для статики)
- Gunicorn (веб WSGI-сервер)
- GitHub Actions (сервис автоматизации тестирования, размещения и запуска проекта на сервере)
- Клонируйте репозиторий и перейдите в директорию infra в командной строке
git clone https://github.com/lmashik/foodgram-project-react.git
cd infra/
-
В nginx.conf поменяйте IP-адрес и/или домен на свой
-
Cоздайте файл .env для переменных виртуального окружения и заполните его по образцу
nano .env
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=<username>
POSTGRES_PASSWORD=<password>
DB_HOST=db
DB_PORT=5432
- Создайте и запустите контейнеры
sudo docker-compose up -d
(Для новых версий docker compose как плагина docker
sudo docker compose up -d
)
- Примените миграции внутри контейнера backend
sudo docker-compose exec backend python manage.py migrate
или
sudo docker compose exec backend python manage.py migrate
- Соберите статику
sudo docker-compose exec backend python manage.py collectstatic
или
sudo docker compose exec backend python manage.py collectstatic
Проект будет доступен по адресу http://localhost/
Административная часть — по адресу http://localhost/admin/
Для доступа в административную часть создайте суперпользователя
sudo docker-compose exec backend python manage.py createsuperuser
или
sudo docker compose exec backend python manage.py createsuperuser
Документация к API — по адресу http://localhost/api/docs/redoc.html
Для полноценного использования функционала, связанного с рецептами, необходимо начать с добавления тегов и ингредиентов в базу, так как рецепты не могут быть созданы без них. Теги можно добавить через административную часть сервиса, а для добавления ингредиентов подготовлена информация в csv-формате, которую можно добавить в базу с помощью команды
sudo docker-compose exec backend python manage.py loadingredients_csv
или
sudo docker compose exec backend python manage.py loadingredients_csv
Сервис Foodgram реализован через взаимодействие с API. Для запуска backend-части (API Foodgram) проекта:
- Перейдите в директорию backend, создайте и активируйте виртуальное окружение
cd ../backend
python3 -m venv env
-
Если у вас Linux/macOS
source env/bin/activate
-
Если у вас windows
source env/scripts/activate
- Обновите pip до последней версии
python3 -m pip install --upgrade pip
- Установите зависимости из файла requirements.txt
pip install -r requirements.txt
- Выполните миграции
python3 manage.py migrate
- Запустите проект
python3 manage.py runserver
Для регистрации необходимо отправить POST запрос к эндпоинту http://127.0.0.1:8000/api/users/, передав в теле запроса:
{
"username": "vasya.pupkin",
"password": "Qwerty123",
"first_name": "Вася",
"last_name": "Пупкин",
"email": "[email protected]"
}
Для получения токена необходимо отправить POST запрос к эндпоинту http://127.0.0.1:8000/api/auth/token/login/, передав в теле запроса:
{
"password": "Qwerty123",
"email": "[email protected]"
}
При успешном завершении запроса вы получите ответ в формате JSON. Пример ответа на запрос получения токена:
{
"auth_token": "123e7f1736546f36cfaa231efe691233e7e01b2b"
}
Запрос осуществляется посредством протокола HTTP 1.1 на адрес, соответствующий ресурсу. HTTP-запросы должны содержать заголовок: Authorization: Token
Ответ сервиса представляет собой JSON-документ в кодировке UTF-8, содержимое зависит от запроса.
Пример ответа в случае успешного выполнения запроса одного из рецептов на эндпоинт http://127.0.0.1:8000/api/recipes/1/:
HTTP 1.1 200 OK
{
"id": 30,
"tags": [
{
"id": 3,
"name": "ПП",
"colour": "#E26C2A",
"slug": "pp"
}
],
"author": {
"id": 3,
"username": "romashka",
"email": "[email protected]",
"first_name": "Анатолий",
"last_name": "Иванов",
"is_subscribed": false
},
"ingredients": [
{
"id": 1,
"name": "Картошка",
"measurement_unit": "кг",
"amount": 4
}
],
"is_favorited": false,
"is_in_shopping_cart": false,
"name": "Оливье",
"image": "http://127.0.0.1:8000/media/11.jpg",
"text": "все смешать",
"cooking_time": 4
}
Ресурс - часть системы, с которой можно работать. В Foodgram ресурсами являются: пользователи, теги, ингредиенты, рецепты, рецепты избранного, рецепты списка покупок, любимые авторы (подписки).
/api/users/ (GET, POST)
/api/users/<user_id>/ (GET)
/api/users/me/ (GET)
/api/users/set_password/ (POST)
/api/users/subscriptions/ (GET)
/api/tags/ (GET)
/api/tags/<tag_id>/ (GET)
/api/ingredients/ (GET)
/api/ingredients/<ingredient_id>/ (GET)
/api/recipes/ (GET, POST)
/api/recipes/<recipes_id>/ (GET, PATCH, DELETE)
/api/recipes/favorites/ (GET)
/api/recipes/download_shopping_cart/ (GET)
Для полноценного использования функционала, связанного с рецептами, необходимо начать с добавления тегов и ингредиентов в базу, так как рецепты не могут быть созданы без них. Теги можно добавить через административную часть сервиса, а для добавления ингредиентов подготовлена информация в csv-формате, которую можно добавить в базу с помощью команды
python3 manage.py loadingredients_csv
из директории с manage.py (backend)
Мария Лапикова
[email protected]