На этом сервисе пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.
Python, Django Rest Framework, PostgreSQL, gunicorn, nginx, Docker
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=пароль для подключения к БД
DB_HOST=db
DB_PORT=5432
SECRET_KEY = 'ключ django проекта. файл settings.py'
- Перед запуском у вас должен быть установлен Docker, Docker-Compose
Запуск файла docker-compose.yml
sudo docker compose up -d
Миграции
sudo docker compose exec <name_web> python manage.py migrate
Создание суперпользователя
sudo docker compose exec <name_web> python manage.py createsuperuser
Статика
sudo docker compose exec <name_web> python manage.py collectstatic --no-input
Загрузка данных в БД
sudo docker-compose exec <name_web> python manage.py loaddata <dump.json>
Клонировать репозиторий с GitHub
git clone git@github.com:boginskiy/foodgram-project-react.git
Установить виртуальное окружение venv
python3 -m venv venv
Aктивировать виртуальное окружение venv
source venv/bin/activate
Обновить менеджер пакетов pip
python3 -m pip install --upgrade pip
Установить зависимости из файла requirements.txt
pip install -r requirements.txt
Выполнить миграции
python3 manage.py migrate
Создать суперпользователя
python3 manage.py createsuperuser
Запустить проект
python3 manage.py runserver
Получить спискок пользователей (GET): http://127.0.0.1:8000/api/v1/users/
- При запросах доступны параметры: page - номер страницы (тип integer); limit - количество объектов на странице (тип integer);
- Допустимы анонимные запросы от пользователей
Регистрация пользователя (POST): http://127.0.0.1:8000/api/users/
{
"email": "string",
"username": "string",
"first_name": "string",
"last_name": "string",
"password": "string"
}
- email - адрес электронной почты
- username - уникальный юзернейм
- first_name - имя
- last_name - фамилия
- password - пароль
Получить профиль пользователя (GET): http://127.0.0.1:8000/api/users/{users_id}/
- {users_id} - id пользователя
- Допустимы анонимные запросы от пользователей
Получить текущего пользователя (GET): http://127.0.0.1:8000/api/users/me/
- Доступно авторизованному пользователю
Изменение пароля текущего пользователя (POST): http://127.0.0.1:8000/api/users/set_password/
{
"new_password": "string",
"current_password": "string",
}
- new_password - новый пароль
- current_password - старый пароль
- Изменить пароль может только текущий пользователь
Получить спискок пользователей (POST): http://127.0.0.1:8000/api/auth/token/login/
{
"password": "string",
"email": "string",
}
- Токен используется для авторизации по емейлу и паролю, чтобы далее использовать токен при запросах.
Удаление токена (POST): http://127.0.0.1:8000/api/auth/token/logout/
- Доступно авторизованному пользователю
Получение списка тегов (GET): http://127.0.0.1:8000/api/tags/
- Допустимы анонимные запросы от пользователей
Получение тега (GET): http://127.0.0.1:8000/api/tags/{tags_id}
- {tags_id} - id тега
- Допустимы анонимные запросы от пользователей
Получение списка рецептов (GET): http://127.0.0.1:8000/api/recipes/
- При запросах доступны параметры: page - номер страницы (тип integer); limit - количество объектов на странице (тип integer); is_favorited - показывать только рецепты, находящиеся в списке избранного (Enum: 0 1); is_in_shopping_cart - показывать только рецепты, находящиеся в списке покупок (Enum: 0 1); author - показывать рецепты только автора с указанным id (тип integer); tags - Example: tags=lunch&tags=breakfast. Показывать рецепты только с указанными тегами (по slug)
- Допустимы анонимные запросы от пользователей
Создание рецепта (POST): http://127.0.0.1:8000/api/recipes/
{
"ingredients": [
{
"id": "integer",
"amount": "integer"
},
]
"tags": "array of integers",
"image": "string <binary>",
"name": "string",
"text": "string",
"cooking_time": "integer"
}
- ingredients - список ингредиентов id - уникальный id (тип integer), amount - количество в рецепте (тип integer);
- tags - cписок id тегов (тип integer);
- image - картинка, закодированная в Base64
- name - (тип string)
- text - описание
- cooking_time - время приготовления (в минутах)
- Доступно только авторизованному пользователю
Получение рецепта по id (GET): http://127.0.0.1:8000/api/recipes/{recipes_id}/
- {recipes_id} - уникальный идентификатор этого рецепта
- Допустимы анонимные запросы от пользователей
Обновление рецепта по id (PUTCH): http://127.0.0.1:8000/api/recipes/{recipes_id}/
{
"ingredients": [
{
"id": "integer",
"amount": "integer"
},
]
"tags": "array of integers",
"image": "string <binary>",
"name": "string",
"text": "string",
"cooking_time": "integer"
}
- {recipes_id} - уникальный идентификатор этого рецепта
- ingredients - список ингредиентов id - уникальный id (тип integer), amount - количество в рецепте (тип integer);
- tags - cписок id тегов (тип integer);
- image - картинка, закодированная в Base64
- name - (тип string)
- text - описание
- cooking_time - время приготовления (в минутах)
- Доступно только автору данного рецепта
Удаление рецепта по id (DELETE): http://127.0.0.1:8000/api/recipes/{recipes_id}/
- {recipes_id} - уникальный идентификатор этого рецепта
- Доступно только автору данного рецепта
Скачать список покупок. (GET): http://127.0.0.1:8000/api/recipes/download_shopping_cart/
- Доступно только авторизованным пользователям
Добавить рецепт в список покупок. (POST): http://127.0.0.1:8000/api/recipes/{recipes_id}/shopping_cart/
- {recipes_id} - уникальный идентификатор этого рецепта.
- Доступно только авторизованным пользователям
Удалить рецепт из списка покупок по id. (DELETE): http://127.0.0.1:8000/api/recipes/{recipes_id}/shopping_cart/
- {recipes_id} - уникальный идентификатор этого рецепта.
- Доступно только авторизованным пользователям
Добавить рецепт в избранное. (POST): http://127.0.0.1:8000/api/recipes/{recipes_id}/favorite/
- {recipes_id} - уникальный идентификатор рецепта.
- Доступно только авторизованным пользователям
Удалить рецепт из избранного (DELETE): http://127.0.0.1:8000/api/recipes/{recipes_id}/favorite/
- {recipes_id} - уникальный идентификатор рецепта.
- Доступно только авторизованным пользователям
Мои подписки (GET): http://127.0.0.1:8000/api/users/subscriptions/
- Возвращает пользователей, на которых подписан текущий пользователь. В выдачу добавляются рецепты
- При запросах доступны параметры: page - номер страницы (тип integer); limit - количество объектов на странице (тип integer); recipes_limit - количество объектов внутри поля recipes (тип integer);
- Доступно только авторизованным пользователям
Подписаться на пользователя (POST): http://127.0.0.1:8000/api/users/{users_id}/subscribe/
- При запросах доступны параметры: recipes_limit - количество объектов внутри поля recipes (тип integer);
- {users_id} - уникальный идентификатор пользователя.
- Доступно только авторизованным пользователям
Отписаться от пользователя (DELETE): http://127.0.0.1:8000/api/users/{users_id}/subscribe/
- {users_id} - уникальный идентификатор пользователя.
- Доступно только авторизованным пользователям
Список ингредиентов (GET): http://127.0.0.1:8000/api/ingredients/
- При запросах доступны параметры: name - Поиск по частичному вхождению в начале названия ингредиента. (тип string);
- Допустимы анонимные запросы от пользователей
Получение ингредиента (GET): http://127.0.0.1:8000/api/ingredients/{ingredients_id}/
- {ingredients_id} - уникальный идентификатор ингредиента.
- Допустимы анонимные запросы от пользователей
Богинский Дмитрий - python разработчик