Giter Club home page Giter Club logo

foodgram-project's Introduction

workflow foodgram Code style: black Imports: isort

foodgram-project

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

На момент создания этого файла ресурс доступен по адресу: http://food-gram.cf (Но это не навсегда :)

Описание проекта и функционала

Главная страница

Содержимое главной страницы — список рецептов, отсортированных по дате публикации (от новых к старым).

Страница рецепта

На странице — полное описание рецепта, возможность добавить рецепт в избранное и в список покупок, возможность подписаться на автора рецепта.

Страница пользователя

На странице — имя пользователя, все рецепты, опубликованные пользователем и возможность подписаться на пользователя.

Подписка на авторов

Подписка на публикации доступна только авторизованному пользователю. Страница подписок доступна только владельцу.

Сценарий поведения пользователя:

  • Пользователь переходит на страницу другого пользователя или на страницу рецепта и подписывается на публикации автора кликом по кнопке Подписаться на автора.
  • Пользователь переходит на страницу «Мои подписки» и просматривает список рецептов, опубликованных теми авторами, на которых он подписался. Сортировка записей — по дате публикации (от новых к старым).
  • При необходимости пользователь может отказаться от подписки на автора: переходит на страницу автора или на страницу его рецепта и нажимает Отписаться от автора.

Список избранного

Работа со списком избранного доступна только авторизованному пользователю. Список избранного может просматривать только его владелец.

Сценарий поведения пользователя:

  • Пользователь отмечает один или несколько рецептов кликом по кнопке Добавить в избранное.
  • Пользователь переходит на страницу «Список избранного» и просматривает персональный список избранных рецептов.
  • При необходимости пользователь может Удалить рецепт из избранного.

Список покупок

Работа со списком покупок доступна авторизованным и не авторизованным пользователям. Список покупок может просматривать только его владелец. Сценарий поведения пользователя:

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

Список покупок скачивается в формате PDF. При скачивании списка покупок ингредиенты в результирующем суммируются если в двух рецептах есть сахар (в одном рецепте 5 г, в другом — 10 г), то в списке будет один пункт: Сахар — 15 г.

Фильтрация по тегам

При нажатии на название тега выводится список рецептов, отмеченных этим тегом. Фильтрация может проводится по нескольким тегам в комбинации «или»: если выбраны несколько тегов — на странице будут показаны рецепты, которые отмечены хотя бы одним из этих тегов. При фильтрации на странице пользователя фильтруются только рецепты выбранного пользователя. При фильтрации на странице избранного фильтруются только избранные рецепты.

Регистрация и авторизация

В проекте доступна система регистрации и авторизации пользователей. Обязательные поля для пользователя:

Логин
Пароль
Email

Что могут делать неавторизованные пользователи

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

Что могут делать авторизованные пользователи

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

Installing

Запуск проекта на локальном компьютере (на примере Linux)

Эти инструкции помогут вам создать копию проекта и запустить ее на локальном компьютере для целей разработки и тестирования. Запуск проекта (на примере Linux)

Перед тем, как начать: если вы не пользуетесь Python 3, вам нужно будет установить инструмент virtualenv при помощи pip install virtualenv. Если вы используете Python 3, у вас уже должен быть модуль venv, установленный в стандартной библиотеке.

  • Создайте на своем компютере папку проекта foodgram mkdir foodgram и перейдите в нее cd foodgram
  • Склонируйте этот репозиторий в текущую папку git clone https://github.com/Bazulenkov/foodgram-project
  • Создайте виртуальное окружение python3 -m venv venv
  • Активируйте виртуальное окружение source venv/bin/activate
  • Создайте файл .env командой touch .env и добавьте в него переменные окружения:
SECRET_KEY = #секретный ключ Django
DEBUG=1

Сгенерировать SECRET_KEY вы можете, например, по этой статье https://tech.serhatteker.com/post/2020-01/django-create-secret-key/

  • Установите зависимости pip install -r requirements.txt
  • Создайте все необходимые таблицы в базе данных - выполните команду ./manage.py migrate
  • Импортируйте теги в базу - выполните команду ./manage.py load_tags
  • Чтобы импортировать ингридиенты из файла ingredients.json - выполните команду ./manage.py import_ingredients_from_json_file
  • Создайте администратора сайта ./manage.py createsuperuser

Чтобы запустить проект на локальной машине - ./manage.py runserver

Деплой на удаленный сервер

Для запуска проекта на удаленном сервере необходимо:

  • на сервере должен быть установлен docker и docker-compose
  • в файле .env поменять настройки DEBUG=0
  • скопировать на сервер файлы docker-compose.yaml, .env командами:
scp docker-compose.yaml  {user}@{server-ip}:
scp .env {user}@{server-ip}:

  • запустить на сервере контейнеры командой sudo docker-compose up

CI/CD

Для автоматического деплоя на сервер необходимо:

  • создать переменные окружения в разделе secrets настроек текущего репозитория:
DOCKER_PASSWORD # Пароль от Docker Hub
DOCKER_USERNAME # Логин от Docker Hub
HOST # Публичный ip адрес сервера
USER # Пользователь зарегистрированный на сервере
PASSPHRASE # Если ssh-ключ защищен фразой-паролем
SSH_KEY # Приватный ssh-ключ
TELEGRAM_TO # ID телеграм-аккаунта
TELEGRAM_TOKEN # Токен бота

После каждого обновления репозитория (git push) будет происходить:

  1. Проверка кода на стандарты PEP8.
  2. Сборка и публикация образа на Docker Hub.
  3. Автоматический деплой.
  4. Отправка уведомления в персональный чат Telegram.

Built With

Authors

License

This project is licensed under the MIT License - see the LICENSE.md file for details

foodgram-project's People

Contributors

bazulenkov avatar

Watchers

 avatar

Forkers

turten1990

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.