Skip to content

boginskiy/foodgram-project

Repository files navigation

Продуктовый помощник «Foodgram»

example workflow

Описание проекта

На этом сервисе пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.

Технологии

Python, Django Rest Framework, PostgreSQL, gunicorn, nginx, Docker

Шаблон наполнения env-файла

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-Compose

  • Перед запуском у вас должен быть установлен 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>

Запускаем проект в dev режиме на OC Linux

Клонировать репозиторий с 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

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

Запросы для Пользователей (users)

Получить спискок пользователей (GET): http://127.0.0.1:8000/api/v1/users/

  • При запросах доступны параметры: page - номер страницы (тип integer); limit - количество объектов на странице (тип integer);
  • Допустимы анонимные запросы от пользователей

Запрос к users

Регистрация пользователя (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 - пароль

Запрос к users

Получить профиль пользователя (GET): http://127.0.0.1:8000/api/users/{users_id}/

  • {users_id} - id пользователя
  • Допустимы анонимные запросы от пользователей

Запрос к users

Получить текущего пользователя (GET): http://127.0.0.1:8000/api/users/me/

  • Доступно авторизованному пользователю

Запрос к users

Изменение пароля текущего пользователя (POST): http://127.0.0.1:8000/api/users/set_password/

    {
        "new_password": "string",
        "current_password": "string",
    }

  • new_password - новый пароль
  • current_password - старый пароль
  • Изменить пароль может только текущий пользователь

Запросы для токена авторизации (auth/token)

Получить спискок пользователей (POST): http://127.0.0.1:8000/api/auth/token/login/

    {
        "password": "string",
        "email": "string",
    }

  • Токен используется для авторизации по емейлу и паролю, чтобы далее использовать токен при запросах.

Запрос к auth/token

Удаление токена (POST): http://127.0.0.1:8000/api/auth/token/logout/

  • Доступно авторизованному пользователю

Запросы для тегов (tags)

Получение списка тегов (GET): http://127.0.0.1:8000/api/tags/

  • Допустимы анонимные запросы от пользователей

Запрос к tags

Получение тега (GET): http://127.0.0.1:8000/api/tags/{tags_id}

  • {tags_id} - id тега
  • Допустимы анонимные запросы от пользователей

Запросы по рецептам (recipes)

Получение списка рецептов (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)
  • Допустимы анонимные запросы от пользователей

Запрос к recipes

Создание рецепта (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 - время приготовления (в минутах)
  • Доступно только авторизованному пользователю

Запрос к recipes

Получение рецепта по id (GET): http://127.0.0.1:8000/api/recipes/{recipes_id}/

  • {recipes_id} - уникальный идентификатор этого рецепта
  • Допустимы анонимные запросы от пользователей

Запрос к recipes

Обновление рецепта по 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 - время приготовления (в минутах)
  • Доступно только автору данного рецепта

Запрос к recipes

Удаление рецепта по id (DELETE): http://127.0.0.1:8000/api/recipes/{recipes_id}/

  • {recipes_id} - уникальный идентификатор этого рецепта
  • Доступно только автору данного рецепта

Запросы к списка покупок (shopping_cart):

Скачать список покупок. (GET): http://127.0.0.1:8000/api/recipes/download_shopping_cart/

  • Доступно только авторизованным пользователям

Запрос к shopping_cart

Добавить рецепт в список покупок. (POST): http://127.0.0.1:8000/api/recipes/{recipes_id}/shopping_cart/

  • {recipes_id} - уникальный идентификатор этого рецепта.
  • Доступно только авторизованным пользователям

Запрос к shopping_cart

Удалить рецепт из списка покупок по id. (DELETE): http://127.0.0.1:8000/api/recipes/{recipes_id}/shopping_cart/

  • {recipes_id} - уникальный идентификатор этого рецепта.
  • Доступно только авторизованным пользователям

Запросы к избранным рецептам (favorite):

Добавить рецепт в избранное. (POST): http://127.0.0.1:8000/api/recipes/{recipes_id}/favorite/

  • {recipes_id} - уникальный идентификатор рецепта.
  • Доступно только авторизованным пользователям

Запрос к favorite

Удалить рецепт из избранного (DELETE): http://127.0.0.1:8000/api/recipes/{recipes_id}/favorite/

  • {recipes_id} - уникальный идентификатор рецепта.
  • Доступно только авторизованным пользователям

Запросы к подпискам пользователя (subscriptions):

Мои подписки (GET): http://127.0.0.1:8000/api/users/subscriptions/

  • Возвращает пользователей, на которых подписан текущий пользователь. В выдачу добавляются рецепты
  • При запросах доступны параметры: page - номер страницы (тип integer); limit - количество объектов на странице (тип integer); recipes_limit - количество объектов внутри поля recipes (тип integer);
  • Доступно только авторизованным пользователям

Запрос к subscriptions

Подписаться на пользователя (POST): http://127.0.0.1:8000/api/users/{users_id}/subscribe/

  • При запросах доступны параметры: recipes_limit - количество объектов внутри поля recipes (тип integer);
  • {users_id} - уникальный идентификатор пользователя.
  • Доступно только авторизованным пользователям

Запрос к subscriptions

Отписаться от пользователя (DELETE): http://127.0.0.1:8000/api/users/{users_id}/subscribe/

  • {users_id} - уникальный идентификатор пользователя.
  • Доступно только авторизованным пользователям

Запросы к ингредиентам (ingredients):

Список ингредиентов (GET): http://127.0.0.1:8000/api/ingredients/

  • При запросах доступны параметры: name - Поиск по частичному вхождению в начале названия ингредиента. (тип string);
  • Допустимы анонимные запросы от пользователей

Запрос к ingredients

Получение ингредиента (GET): http://127.0.0.1:8000/api/ingredients/{ingredients_id}/

  • {ingredients_id} - уникальный идентификатор ингредиента.
  • Допустимы анонимные запросы от пользователей

Автор

Богинский Дмитрий - python разработчик

About

Продуктовый помощник «Foodgram»

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •