Giter VIP home page Giter VIP logo

foodgram-project-react's Introduction

Проект Foodgram

Оглавление:

Стек технологий:

  • Django and Django REST Framework
  • Docker
  • GithubActions
  • Gunicorn
  • Nginx
  • PostgreSQL
  • Python

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

Foodgram - это веб-приложение, предоставляющее пользователям платформу для обмена рецептами. Пользователи могут делиться своими кулинарными шедеврами, добавлять понравившиеся рецепты в избранное и подписываться на авторов для получения обновлений. Кроме того, в приложении доступен сервис "Список покупок", который поможет упростить планирование покупок продуктов для приготовления блюд. Проект развернут в контейнерах Docker, с автоматическим тестированием и развертыванием на виртуальном сервере с Ubuntu через Github Actions. Важно отметить, что сайт обеспечивает безопасное соединение с использованием протокола HTTPS, обеспечивая конфиденциальность пользовательских данных.

Как запустить проект:

  1. Скачать docker на сервер, если его нет. Инструкции: https://docs.docker.com/get-docker/

  2. Создать папку проекта, например foodgram и перейти в нее:

mkdir foodgram
cd foodgram
  1. Скачать файл docker-compose.production.yml из этого репозитория.

  2. Создать в папке .env файл со сделующей информацией:

TOKEN= указать секретный токен 
DEBUG=выбрать True или False и указать
ALLOWED_HOSTS= ip сервера,127.0.0.1,localhost,домен сайта
POSTGRES_USER= логин
POSTGRES_PASSWORD= пароль
POSTGRES_DB= имя БД
DB_HOST= название хоста
DB_PORT=5432
  1. Запустить систему контейнеров:
sudo docker compose -f docker-compose.production.yml up
  1. Прописать для заполнения БД:
# команда для отображения контейнеров sudo docker ps -a
# вам нужен контейнер с бэкендом для всех операций ниже:

# миграции, ниже дан пример с id контейнера, используйте ваш id либо имя
sudo docker exec -it 23230f87a331 python manage.py migrate

# выгрузка данных, ниже дан пример с id контейнера, используйте ваш id либо имя
sudo docker exec -it 23230f87a331 python manage.py csv_to_db

# сбор статики, ниже дан пример с id контейнера, используйте ваш id либо имя
sudo docker exec -it 23230f87a331 python manage.py collectstatic --no-input
  1. Зайти в контейнер с БД:
sudo docker exec it имя_контейнера psql -U имя_пользователя -d имя_БД

в открывшемся терминале прописать

INSERT INTO recipes_tag VALUES (1,'завтрак', '008000', 'breakfast');
INSERT INTO recipes_tag VALUES (2,'обед', 'FF0000', 'lunch');
INSERT INTO recipes_tag VALUES (3,'ужин', '0000FF', 'dinner');

Как открыть документацию:

После скачивания репозиория foodgram с гитхаб доступно в нем и по адресу: http://localhost/api/docs/redoc.html

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

Список пользователей Запрос списка пользователей, может производиться как зарегистрированным пользователем, так и анонимным. Тип запроса: GET. Можно задать параметры запроса (query parameters): page(целое число - номер страницы) и limit(целое число - кол-во объектов на странице). URL:

http://localhost/api/users/

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

{
  "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
    }
  ]
}

Создание рецепта Доступно только авторизованному пользователю. Тип запроса: POST

URL:

http://localhost/api/recipes/

В запросе указываются: ingredients (Array of objects) Список ингредиентов tags (Array of integers) Список id тегов image (string ) Картинка, закодированная в Base64 name (string <= 200 characters ) Название text (string) Описание cooking_time (integer >= 1 ) Время приготовления (в минутах)

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

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

Пример ответа:

{
  "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
}

Добавить рецепт в список покупок Доступно только авторизованным пользователям. Тип запроса: POST.

URL:

http://localhost/api/recipes/{id}/shopping_cart/

Обязательный path parameter: id (string) - уникальный идентификатор рецепта.

Пример ответа:

{
  "id": 0,
  "name": "string",
  "image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
  "cooking_time": 1
}

Автор проекта:

Гайфутдинов Артур

foodgram-project-react's People

Contributors

gaifut avatar

Watchers

 avatar

foodgram-project-react's Issues

Фикс стилей отображения переноса текста рецепта.

Теперь при публикации рецепта авторские переносы в тексте отображаются при публикации и не сливаются в один монолитный текст. Добавлены стили в frontend/src/pages/single-card/description/styles.module.css и применены в frontend/src/pages/single-card/description/index.js

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.