https://github.com/lmashik/foodgram-project-react
Сервис для создания и просмотра рецептов блюд
https://github.com/lmashik/foodgram-project-react
djoser docker dockercompose drf github-actions gunicorn nginx postgresql python37 reportlab
Last synced: 8 months ago
JSON representation
Сервис для создания и просмотра рецептов блюд
- Host: GitHub
- URL: https://github.com/lmashik/foodgram-project-react
- Owner: lmashik
- Created: 2023-02-20T10:08:20.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-11-08T20:08:04.000Z (almost 2 years ago)
- Last Synced: 2025-01-11T02:18:28.030Z (9 months ago)
- Topics: djoser, docker, dockercompose, drf, github-actions, gunicorn, nginx, postgresql, python37, reportlab
- Language: JavaScript
- Homepage:
- Size: 584 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Foodgram
-------------------------------
## Описание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 (сервис автоматизации тестирования, размещения и запуска проекта на сервере)-------------------------------
## Запуск проекта в контейнерах на своем сервере
1. Клонируйте репозиторий и перейдите в директорию infra в командной строке
```bash
git clone https://github.com/lmashik/foodgram-project-react.git
``````bash
cd infra/
```
2. В nginx.conf поменяйте IP-адрес и/или домен на свой3. Cоздайте файл .env для переменных виртуального окружения
и заполните его по образцу
```bash
nano .env
```DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=
POSTGRES_PASSWORD=
DB_HOST=db
DB_PORT=54324. Создайте и запустите контейнеры
```bash
sudo docker-compose up -d
```
(Для новых версий docker compose как плагина docker
```bash
sudo docker compose up -d
```
)5. Примените миграции внутри контейнера backend
```bash
sudo docker-compose exec backend python manage.py migrate
```
или
```bash
sudo docker compose exec backend python manage.py migrate
```6. Соберите статику
```bash
sudo docker-compose exec backend python manage.py collectstatic
```
или
```bash
sudo docker compose exec backend python manage.py collectstatic
```Проект будет доступен по адресу http://localhost/
Административная часть — по адресу http://localhost/admin/
Для доступа в административную часть создайте суперпользователя
```bash
sudo docker-compose exec backend python manage.py createsuperuser
```
или
```bash
sudo docker compose exec backend python manage.py createsuperuser
```Документация к API — по адресу http://localhost/api/docs/redoc.html
Для полноценного использования функционала, связанного с рецептами,
необходимо начать с добавления тегов и ингредиентов в базу,
так как рецепты не могут быть созданы без них.
Теги можно добавить через административную часть сервиса, а для
добавления ингредиентов подготовлена информация в csv-формате, которую
можно добавить в базу с помощью команды```bash
sudo docker-compose exec backend python manage.py loadingredients_csv
```
или
```bash
sudo docker compose exec backend python manage.py loadingredients_csv
```-------------------------------
## API
### Запуск
Сервис Foodgram реализован через взаимодействие с API.
Для запуска backend-части (API Foodgram) проекта:1. Перейдите в директорию backend, создайте и активируйте виртуальное
окружение```bash
cd ../backend
``````bash
python3 -m venv env
```* Если у вас Linux/macOS
```bash
source env/bin/activate
```* Если у вас windows
```bash
source env/scripts/activate
```2. Обновите pip до последней версии
```bash
python3 -m pip install --upgrade pip
```3. Установите зависимости из файла requirements.txt
```bash
pip install -r requirements.txt
```4. Выполните миграции
```bash
python3 manage.py migrate
```5. Запустите проект
```bash
python3 manage.py runserver
```### Регистрация
Для регистрации необходимо отправить POST запрос к эндпоинту
http://127.0.0.1:8000/api/users/, передав в теле запроса:```json
{
"username": "vasya.pupkin",
"password": "Qwerty123",
"first_name": "Вася",
"last_name": "Пупкин",
"email": "vpupkin@yandex.ru"
}
```### Token
#### Получение Token
Для получения токена необходимо отправить POST запрос к эндпоинту
http://127.0.0.1:8000/api/auth/token/login/, передав в теле запроса:```json
{
"password": "Qwerty123",
"email": "vpupkin@yandex.ru"
}
```При успешном завершении запроса вы получите ответ в формате JSON.
Пример ответа на запрос получения токена:```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_
```json
{
"id": 30,
"tags": [
{
"id": 3,
"name": "ПП",
"colour": "#E26C2A",
"slug": "pp"
}
],
"author": {
"id": 3,
"username": "romashka",
"email": "romashka@test.test",
"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// (GET)
/api/users/me/ (GET)
/api/users/set_password/ (POST)
/api/users/subscriptions/ (GET)
/api/tags/ (GET)
/api/tags// (GET)
/api/ingredients/ (GET)
/api/ingredients// (GET)
/api/recipes/ (GET, POST)
/api/recipes// (GET, PATCH, DELETE)
/api/recipes/favorites/ (GET)
/api/recipes/download_shopping_cart/ (GET)
```Для полноценного использования функционала, связанного с рецептами,
необходимо начать с добавления тегов и ингредиентов в базу,
так как рецепты не могут быть созданы без них.
Теги можно добавить через административную часть сервиса, а для
добавления ингредиентов подготовлена информация в csv-формате, которую
можно добавить в базу с помощью команды```bash
python3 manage.py loadingredients_csv
```
из директории с manage.py (backend)-------------------------------
## Автор
Мария Лапикова
mashik_p@mail.ru