Skip to content

Lozhkin-pa/foodgram

Repository files navigation

🥑 FOODGRAM

"Продуктовый помощник"

Python Postgres DjangoREST Nginx Gunicorn Docker

Foodgram - сайт, на котором пользователи могут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Пользователям сайта также будет доступен сервис «Список покупок». Он позволит создавать список продуктов, которые нужно купить для приготовления выбранных блюд с возможностью скачать файл с перечнем и количеством необходимых ингредиентов для всех рецептов.

Возможности Foodgram

  • Регистрация и авторизация пользователя.
  • Создание/обновление/удаление рецепта: название, описание, время приготовления, выбор ингредиентов, тегов, загрузка фотографии.
  • Просмотр выбранного рецепта.
  • Просмотр всех рецептов всех пользователей.
  • Просмотре всех рецептов выбранного пользователя.
  • Подписка на пользователей.
  • Добавление рецептов в Избанное.
  • Добавление рецептов в Список покупок.
  • Скачивание файла с перечнем и количеством ингредиентов из Списка покупок.
  • Фильтрация рецептов по тегам.

Установка на локальном компьютере

  1. Клонируйте репозиторий
> git clone [email protected]:Lozhkin-pa/foodgram-project-react.git
  1. Установите и активируйте виртуальное окружение
> python -m venv venv
> source venv/Scripts/activate  - для Windows
> source venv/bin/activate - для Linux
  1. Установите зависимости
> python -m pip install --upgrade pip
> pip install -r requirements.txt
  1. Перейдите в папку backend и выполните миграции
> cd backend
> python manage.py migrate
  1. Создайте суперпользователя
> python manage.py createsuperuser
  1. Загрузите подготовленную базу ингредиентов
> python manage.py import_data
  1. Запустите проект
> python manage.py runserver

Развертывание на удаленном сервере

  1. Создайте папку проекта в домашней директории сервера и перейдите в нее
> mkdir foodgram
> cd foodgram
  1. Скопируйте на сервер в папку проекта файл docker-compose.production.yml
  2. Скачайте с Docker Hub на сервер образы для контейнеров
> sudo docker compose -f docker-compose.production.yml pull
  1. Запустите контейнеры в режиме демона
> sudo docker compose -f docker-compose.production.yml up -d
  1. Выполните команды для миграций и сборки статики
> sudo docker compose -f docker-compose.production.yml exec backend python manage.py migrate
> sudo docker compose -f docker-compose.production.yml exec backend python manage.py collectstatic
> sudo docker compose -f docker-compose.production.yml exec backend cp -r /app/collect_static/. /static_backend/static/
  1. Загрузите подготовленную базу ингредиентов
> sudo docker compose -f docker-compose.production.yml exec backend python manage.py import_data
  1. Создайте суперпользователя
> sudo docker compose -f docker-compose.production.yml exec backend python manage.py createsuperuser

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

Пример ответа (200 OK):

{
  "count": 123,
  "next": "http://foodgram.example.org/api/users/?page=4",
  "previous": "http://foodgram.example.org/api/users/?page=2",
  "results": [
    {
      "email": "[email protected]",
      "id": 0,
      "username": "string",
      "first_name": "Вася",
      "last_name": "Пупкин",
      "is_subscribed": false
    }
  ]
}

Пример тела запроса:

{
  "email": "[email protected]",
  "username": "vasya.pupkin",
  "first_name": "Вася",
  "last_name": "Пупкин",
  "password": "Qwerty123"
}

Пример ответа (200 OK):

{
  "email": "[email protected]",
  "id": 0,
  "username": "vasya.pupkin",
  "first_name": "Вася",
  "last_name": "Пупкин"
}

Пример ответа (200 OK):

{
  "count": 123,
  "next": "http://foodgram.example.org/api/recipes/?page=4",
  "previous": "http://foodgram.example.org/api/recipes/?page=2",
  "results": [
    {
      "id": 0,
      "tags": [
        {
          "id": 0,
          "name": "Завтрак",
          "color": "#E26C2D",
          "slug": "breakfast"
        }
      ],
      "author": {
        "email": "[email protected]",
        "id": 0,
        "username": "string",
        "first_name": "Вася",
        "last_name": "Пупкин",
        "is_subscribed": false
      },
      "ingredients": [
        {
          "id": 0,
          "name": "Картофель отварной",
          "measurement_unit": "г",
          "amount": 1
        }
      ],
      "is_favorited": true,
      "is_in_shopping_cart": true,
      "name": "string",
      "image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
      "text": "string",
      "cooking_time": 1
    }
  ]
}

Пример тела запроса:

{
  "ingredients": [
    {
      "id": 1123,
      "amount": 10
    }
  ],
  "tags": [
    1,
    2
  ],
  "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAgMAAABieywaAAAACVBMVEUAAAD///9fX1/S0ecCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNoAAAAggCByxOyYQAAAABJRU5ErkJggg==",
  "name": "string",
  "text": "string",
  "cooking_time": 1
}

Пример ответа (200 OK):

{
  "id": 0,
  "tags": [
    {
      "id": 0,
      "name": "Завтрак",
      "color": "#E26C2D",
      "slug": "breakfast"
    }
  ],
  "author": {
    "email": "[email protected]",
    "id": 0,
    "username": "string",
    "first_name": "Вася",
    "last_name": "Пупкин",
    "is_subscribed": false
  },
  "ingredients": [
    {
      "id": 0,
      "name": "Картофель отварной",
      "measurement_unit": "г",
      "amount": 1
    }
  ],
  "is_favorited": true,
  "is_in_shopping_cart": true,
  "name": "string",
  "image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
  "text": "string",
  "cooking_time": 1
}

Технологии

Автор

Бэкенд-разработка: Павел Ложкин

Адрес сервера и суперпользователь

Доменное имя: https://myfoodgramproject.sytes.net/
username: Admin
email: [email protected]
password: Admin

About

"Продуктовый помощник"

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published