myfoodgramjp.hopto.org
Онлайн-сервис и API для него. Пользователи могут публиковать рецепты, подписываться на публикации других пользователей, добавлять понравившиеся рецепты в список «Избранное», а перед походом в магазин скачивать сводный список продуктов, необходимых для приготовления одного или нескольких выбранных блюд.
Python 3.7
Django 3.2
REST Framework 3.12.4
Djoser 2.2
подробнее см. прилагаемый файл зависимостей requrements.txt
- При необходимости, находясь на удалённом сервере, установите Docker, Docker Compose и Nginx, выполнив следующие команды:
sudo apt update
sudo apt install curl
curl -fSL https://get.docker.com -o get-docker.sh
sudo sh ./get-docker.sh
sudo apt-get install docker-compose-plugin
sudo apt install nginx -y
sudo systemctl start nginx
Подготовьте файл конфигурации веб-сервера:
sudo nano /etc/nginx/sites-enabled/default
Заполните файл конфигурации веб-сервера:
server {
server_name <IP_вашего_сервера> <ваш_домен>;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8000;
}
После сохранения сделайте проверку синтаксиса и перезапустите конфигурацию Nginx:
sudo nginx -t
sudo systemctl reload nginx
Установите certbot:
sudo apt install snapd
sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Запустите certbot для получения SSL-сертификата:
sudo certbot --nginx
sudo systemctl reload nginx
Находясь в домашней директории сервера создайте папку проекта - foodgram.
mkdir foodgram
В папке foodgram создайте файл .env со следующим содержанием:
POSTGRES_DB=<имя_базы_данных>
POSTGRES_USER=<имя_пользователя>
POSTGRES_PASSWORD=<пароль_пользователя>
DB_HOST=<имя_контейнера_БД>
DB_PORT=5432
SECRET_KEY = <ваш_ключ>
Перейдите в настройки репозитория — Settings, выберите Secrets and Variables → Actions → New repository secret. Сохраните следующие переменные:
DOCKER_PASSWORD - <имя_пользователя_на_DockerHub>
DOCKER_USERNAME - <пароль_от_DockerHub>
HOST - <IP_сервера>
USER - <username_для_подключения_к_серверу>
SSH_KEY - <приватный_SSH_ключ>
SSH_PASSPHRASE - <пароль_от_сервера>
TELEGRAM_TO - <id_вашего_телеграм_аккаунта>
TELEGRAM_TOKEN - <токен_вашего_телеграм_бота>
git add .
git commit -m '_'
git push
Клонировать репозиторий
git clone [email protected]:DianaKim9319/foodgram-project-react.git
Cоздать и активировать виртуальное окружение:
cd backend
python3 -m venv venv
source venv/bin/activate
Установить зависимости из файла requirements.txt:
python3 -m pip install --upgrade pip
pip install -r requirements.txt
Выполнить миграции:
python3 manage.py migrate
Запустить проект:
python3 manage.py runserver
http://localhost:8090/api/users/
Пример тела запроса:
{
"email": "[email protected]",
"username": "vasya.pupkin",
"first_name": "Вася",
"last_name": "Пупкин",
"password": "Qwerty123"
}
http://localhost:8090/api/users/{id}/
http://localhost:8090/api/ingredients/
http://localhost:8090/api/tags/
http://localhost:8090/api/recipes/
Пример тела запроса:
{
"ingredients": [
{
"id": 1123,
"amount": 10
}
],
"tags": [
1,
2
],
"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAgMAAABieywaAAAACVBMVEUAAAD///9fX1/S0ecCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNoAAAAggCByxOyYQAAAABJRU5ErkJggg==",
"name": "string",
"text": "string",
"cooking_time": 1
}
http://localhost:8090/api/recipes/
http://localhost:8090/api/recipes/{id}/
Пример тела запроса:
{
"ingredients": [
{
"id": 839,
"amount": 15
}
],
"tags": [
1,
3
],
"image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAgMAAABieywaAAAACVBMVEUAAAD///9fX1/S0ecCAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAACklEQVQImWNoAAAAggCByxOyYQAAAABJRU5ErkJggg==",
"name": "string",
"text": "string",
"cooking_time": 1
}
http://localhost:8090/api/recipes/{id}/shopping_cart/
Пример тела запроса:
{
"id": 0,
"name": "string",
"image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
"cooking_time": 1
}
http://localhost:8090/api/recipes/{id}/favorite/
Пример тела запроса:
{
"id": 0,
"name": "string",
"image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
"cooking_time": 1
}
http://localhost:8090/api/users/{id}/subscribe/
Пример тела запроса:
{
"email": "[email protected]",
"id": 0,
"username": "string",
"first_name": "Имя",
"last_name": "Фамилия",
"is_subscribed": true,
"recipes": [
{
"id": 0,
"name": "string",
"image": "http://foodgram.example.org/media/recipes/images/image.jpeg",
"cooking_time": 1
}
],
"recipes_count": 0
}