з это заказчик, я это я. описание вот прямо так скинули
з - Здравствуйте. Нужно написать проект на джанго (бэкенд). Фронтенд уже есть. Потом нужно задеплоить на удаленный сервер. ТЗ есть. Сможете сделать?
я - Здравствуйте. Дайте тз посмотрю
з - Задание: часть 1-я. Возможности проекта
Вам предстоит поработать с проектом «Фудграм» — сайтом, на котором пользователи будут публиковать рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Пользователям сайта также будет доступен сервис «Список покупок». Он позволит создавать список продуктов, которые нужно купить для приготовления выбранных блюд.
У будущего веб-приложения уже есть готовый фронтенд — это одностраничное SPA-приложение, написанное на фреймворке React. Файлы, необходимые для его сборки, хранятся в репозитории foodgram-project-react в папке frontend. Этот репозиторий вы сможете склонировать к себе на компьютер после того, как прочтёте уроки этой темы.
Кроме папки frontend в нём также есть папки backend, infra, data и docs:
В папке infra — заготовка инфраструктуры проекта: конфигурационный файл nginx и docker-compose.yml.
В папке backend лежит только скрытый файл .gitkeep. Он нужен для того, чтобы папка отображалась в Git. Эта папка предназначена для бэкенда сервиса, который вы разработаете с нуля.
В папке data подготовлен список ингредиентов с единицами измерения — это часть данных для БД, с которой вам предстоит работать. Список сохранён в форматах JSON и CSV. Данные из списка нужно будет загрузить в БД.
В папке docs — файлы спецификации API.
Ваша задача как бэкенд-разработчика — написать бэкенд, включая API, для веб-приложения «Фудграм», а также опубликовать это веб-приложение на вашем виртуальном удалённом сервере и сделать его доступным в интернете.
Никаких жёстких рамок по структуре и содержанию кода мы не устанавливаем, однако есть технические условия общего плана, которые должны быть соблюдены.
Как должно работать веб-приложение
Проект состоит из следующих страниц:
главная,
страница рецепта,
страница пользователя,
страница подписок,
избранное,
список покупок,
создание и редактирование рецепта.
Главная
Содержимое главной — список первых шести рецептов, отсортированных по дате публикации «от новых к старым». На этой странице нужно реализовать постраничную пагинацию. Остальные рецепты должны быть доступны на следующих страницах.
Страница рецепта
Здесь — полное описание рецепта. У авторизованных пользователей должна быть возможность добавить рецепт в избранное и список покупок, а также подписаться на автора рецепта.
Страница пользователя
На странице — имя пользователя, все рецепты, опубликованные пользователем и возможность подписаться на пользователя.
Страница подписок
Только у владельца аккаунта должна быть возможность просмотреть свою страницу подписок. Подписаться на публикации могут только авторизованные пользователи.
Сценарий поведения пользователя:
Пользователь переходит на страницу другого пользователя или на страницу рецепта и подписывается на публикации автора кликом по кнопке «Подписаться на автора».
Пользователь переходит на страницу «Мои подписки» и просматривает список рецептов, опубликованных теми авторами, на которых он подписался. Записи сортируются по дате публикации — от новых к старым.
При необходимости пользователь может отказаться от подписки на автора. Тогда ему нужно перейти на страницу автора или на страницу его рецепта и нажать кнопку «Отписаться от автора».
Избранное
Добавлять рецепты в избранное может только авторизованный пользователь. Сам список избранного может просмотреть только его владелец.
Сценарий поведения пользователя:
Пользователь отмечает один или несколько рецептов кликом по кнопке «Добавить в избранное».
Пользователь переходит на страницу «Список избранного» и просматривает свой список избранных рецептов.
При необходимости пользователь может удалить рецепт из избранного.
Список покупок
Работа со списком покупок должна быть доступна только авторизованным пользователям. Доступ к своему списку покупок должен быть только у владельца аккаунта.
Сценарий поведения пользователя:
Пользователь отмечает один или несколько рецептов кликом по кнопке «Добавить в покупки».
Пользователь переходит на страницу «Список покупок», там доступны все добавленные в список рецепты. Пользователь нажимает кнопку «Скачать список» и получает файл с перечнем и количеством необходимых ингредиентов для всех рецептов, сохранённых в «Списке покупок».
При необходимости пользователь может удалить рецепт из списка покупок.
Должна быть возможность скачать список покупок в формате .txt, pdf или любом другом, который вы посчитаете удобным для пользователя.
При скачивании списка покупок ингредиенты в итоговом списке не должны дублироваться; если в двух рецептах есть сахар (в одном рецепте 5 г, в другом — 10 г), то в списке должен быть один пункт: Сахар — 15 г.
В результате список покупок может выглядеть так:
Фарш (баранина и говядина) (г) — 600
Сыр плавленый (г) — 200
Лук репчатый (г) — 50
Картофель (г) — 1000
Молоко (мл) — 250
Яйцо куриное (шт) — 5
Соевый соус (ст. л.) — 8
Сахар (г) — 230
Растительное масло рафинированное (ст. л.) — 2
Соль (по вкусу) — 4
Перец чёрный (щепотка) — 3
Дизайн списка может быть любым, например, вы можете добавить в список шапку и/или подвал с информацией о вашем проекте. Обязательное условие — ингредиенты должны суммироваться.
Создание и редактирование рецепта
Доступ к этой странице должен быть только у авторизованных пользователей. Все поля на ней обязательны для заполнения.
Сценарий поведения пользователя:
Пользователь заполняет все обязательные поля.
Пользователь нажимает кнопку «Создать рецепт».
Также пользователю должна быть доступна возможность отредактировать любой рецепт, который он создал.
Фильтрация по тегам
Тег (от англ. tag, «метка», «бирка», «ярлык») — метка, которая классифицирует данные и помогает облегчить процесс поиска нужной информации в веб-приложении.
При нажатии на название тега должен выводиться список рецептов, отмеченных этим тегом. Фильтрация может проводиться по нескольким тегам в комбинации «или»: если выбрано несколько тегов — в результате должны быть показаны рецепты, которые отмечены хотя бы одним из этих тегов.
При фильтрации на странице пользователя должны фильтроваться только рецепты выбранного пользователя. Такой же принцип должен соблюдаться при фильтрации списка избранного.
Система регистрации и авторизации
В проекте должна быть доступна система регистрации и авторизации пользователей.
Обязательные поля для пользователя:
логин,
пароль,
email,
имя,
фамилия.
Уровни доступа пользователей:
гость (неавторизованный пользователь),
авторизованный пользователь,
администратор.
з - Задание: часть 2-я. «Под капотом» проекта
Какие базовые модели должны быть в проекте
Далее описаны атрибуты базовых моделей проекта. Скорее всего, кроме этих моделей, вам потребуется создать и другие. Какими они будут — вы решите на этапе проектирования архитектуры веб-приложения.
Рецепт
Атрибуты модели:
Автор публикации (пользователь).
Название.
Картинка.
Текстовое описание.
Ингредиенты — продукты для приготовления блюда по рецепту. Множественное поле с выбором из предустановленного списка и с указанием количества и единицы измерения.
Тег. Можно установить несколько тегов на один рецепт.
Время приготовления в минутах.
Все поля обязательны для заполнения.
Тег
Атрибуты модели:
Название.
Цветовой код, например, #49B64E.
Slug.
Все поля обязательны для заполнения и уникальны.
Ингредиент
Данные об ингредиентах должны храниться в нескольких связанных таблицах. На стороне пользователя ингредиент должен содержать следующие атрибуты:
Название.
Количество.
Единицы измерения.
Все поля обязательны для заполнения.
Как должна быть настроена админка
В интерфейс админ-зоны нужно вывести необходимые поля моделей и настроить фильтры:
вывести все модели с возможностью редактирования и удаление записей;
для модели пользователей добавить фильтр списка по email и имени пользователя;
для модели рецептов:
в списке рецептов вывести название и имя автора рецепта;
добавить фильтры по автору, названию рецепта, тегам;
на странице рецепта вывести общее число добавлений этого рецепта в избранное;
для модели ингредиентов:
в список вывести название ингредиента и единицы измерения;
добавить фильтр по названию.
Каким требованиям должна соответствовать инфраструктура проекта
Проект должен использовать базу данных PostgreSQL. Если вы работаете на не очень быстром компьютере — разрабатывайте проект на SQLite, а PostgreSQL подключите позже, при подготовке к деплою.
В Django-проекте должен быть файл requirements.txt со всеми зависимостями.
Проект нужно запустить в трёх контейнерах — nginx, PostgreSQL и Django через docker-compose на вашем удалённом виртуальном сервере (контейнер frontend используется лишь для подготовки файлов). Доступы к этому серверу вы получили в начале изучения модуля «Управление проектом на удалённом сервере».
Образы проекта должны быть запушены на Docker Hub.
Проект должен быть доступен по IP или доменному имени.
Данные должны сохраняться в volumes.
Что ещё должно быть в проекте
Должна обрабатываться ошибка 404.
Веб-приложение должно быть наполнено тестовыми данными: нужно создать несколько пользователей с разным уровнем доступа и хотя бы по одному рецепту от имени каждого пользователя.
з - Это дипломный проект на яндекс практикуме. Я могу дать доступ к аккаунту, чтобы можно было зайти и в удобной форме посмотреть и тз и тд
я - так Сергей, каким бюджетом распологаете?