Loading repository data…
Loading repository data…
NoupSange / repository
Веб-приложение на Django REST Framework и Node.js с использованием контейнеризации Docker.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Foodgram — это веб-приложение на Django REST framework и Node.js с использованием контейнеризации Docker.
Пользователи могут публиковать свои рецепты, добавлять чужие рецепты в избранное и подписываться на публикации других авторов. Зарегистрированным пользователям также будет доступен сервис «Список покупок». Он позволит создавать список продуктов, которые нужно купить для приготовления выбранных блюд.
Во время разработки использовалась база SQLite с последующим подключением к .
API на реализовано строго согласно спецификации из ТЗ, которую можно посмотреть (после развертывания проекта) по адресу: http://localhost/api/docs/. Запущен browsable API по адресу http://localhost/api/.
Авторизация реализована на основе библиотеки Djoser (Token Based Authentication).
По заданию проект должен быть развернут на выделенном удаленном сервере. Для автоматизации деплоя используются .
Админ панель реализована на . Применена кастомизация фильтров, поиска. Доступна по адресу: http://localhost/admin/:
Проект состоит из следующих страниц:
https://<адрес_сайта> /api/recipes/?page=1&limit=6&tags=dessert&tags=vegeterian&tags=breakfast&tags=drink&tags=lunch&tags=salad&tags=soups&tags=dinner
Авторизованный пользователь может добавлять рецепты в список покупок или избранное.
Авторизованный пользователь может редактировать свой рецепт, добавить рецепт в избранное или список покупок, подписаться на другого автора.
Также пользователь может отредактировать любой рецепт, который он создал.
git clone https://github.com/NoupSange/foodgram.git
Перейдите директорию проекта и создайте файл с переменными окружения .env:
cd foodgram
touch .env
Добавьте необходимые переменные окружения, пример:
DEBUG=False
POSTGRES_USER=django_user
POSTGRES_PASSWORD=django_password
POSTGRES_DB=django_db
DB_HOST=db
DB_PORT=5432
cd infra
# запуск контейнеров в интерактивном режиме
docker compose up -d
Дождитесь создания образов и запуска контейнеров.
# выполните миграции БД
docker compose exec backend python manage.py migrate
# создайте суперпользователя для использования админ-панели django
docker compose exec backend python manage.py createsuperuser
# загрузите фикстуры
docker compose exec backend python manage.py load_data
# скопируйте статику для админ-панели
docker compose exec backend python manage.py collectstatic
# переместите статику админк-панели в общий том для nginx и backend
docker compose exec backend cp -r /app/foodgram_backend/collected_static/. /backend_static/static/
# переместите API спецификацию в общий том для nginx
docker compose exec backend cp -r /app/docs /backend_static/
Дождитесь создания образов и запуска контейнеров. В браузере откройте http://127.0.0.1/.
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 5,
"next": null,
"previous": null,
"results": [
{
"email": "aaaaaaaaaaaaa@a.ru",
"id": 5,
"username": "aaaaaaaaa",
"first_name": "aaaaaaaa",
"last_name": "aaaaaa",
"is_subscribed": false,
"avatar": null
},
{
"email": "natalie@yandex.ru",
"id": 2,
"username": "Natlalie",
"first_name": "Наталья",
"last_name": "Лилова",
"is_subscribed": false,
"avatar": "https://foodgramnoup.zapto.org/media/users/avatars/temp.jpeg"
},
{
"email": "svetlana@svetlana.ru",
"id": 4,
"username": "Svetlana",
# ...
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
{
"count": 4,
"next": "https://foodgramnoup.zapto.org/api/recipes/?limit=2&page=2&tags=lunch",
"previous": null,
"results": [
{
"id": 7,
"tags": [
{
"id": 4,
"name": "Десерт",
"slug": "dessert"
},
{
"id": 1,
"name": "Завтрак",
"slug": "breakfast"
},
{
"id": 2,
"name": "Обед",
"slug": "lunch"
},
{
"id": 3,
"name": "Ужин",
"slug": "dinner"
}
],
"author": {
"email": "natalie@yandex.ru",
"id": 2,
"username": "Natlalie",
"first_name": "Наталья",
"last_name": "Лилова",
"is_subscribed": false,
"avatar": "https://foodgramnoup.zapto.org/media/users/avatars/temp.jpeg"
},
"ingredients": [
{
"id": 21,
"name": "апельсиновый сок свежевыжатый",
"measurement_unit": "мл",
"amount": 250
},
{
"id": 26,
"name": "сахар",
"measurement_unit": "г",
"amount": 50
},
{
"id": 27,
"name": "кукурузный крахмал",
"measurement_unit": "г",
"amount": 25
},
{
"id": 28,
"name": "кокосовая стружка",
"measurement_unit": "г",
"amount": 20
}
],
"is_favorited": false,
"is_in_shopping_cart": false,
"name": "Апельсиновый десерт",
"image": "https://foodgramnoup.zapto.org/media/recipes/b4be97183dbf11ee81bcca697c28bd51_upscaled.jpeg",
"text": "Сегодня готовим десерт из 3-х ингредиентов, рецепт которого очень популярен в последнее время. Без яиц, молока и муки. Десерт без выпечки готовится из минимального количества продуктов и супербыстро, за 10 минут, не считая времени его застывания в холодильнике.",
"cooking_time": 20
},
{
"id": 5,
"tags": [
{
"id": 2,
"name": "Обед",
"slug": "lunch"
}
],
"author": {
"email": "viktor@viktor.ru",
"id": 3,
"username": "Viktor",
"first_name": "Виктор",
"last_name": "Сухов",
"is_subscribed": false,
"avatar": "https://foodgramnoup.zapto.org/media/users/avatars/man__copy1.jpg"
},
"ingredients": [
{
"id": 19,
"name": "макароны",
"measurement_unit": "г",
"amount": 200
}
],
"is_favorited": false,
"is_in_shopping_cart": false,
"name": "Макароны с копчёными колбасками в томатно-сливочном соусе",
"image": "https://foodgramnoup.zapto.org/media/recipes/749f4c6801b5575e641f0650e7097b9f.jpg",
"text": "Хотите рецепт идеального ужина? Он перед вами. М