Skip to content

vasilekx/yamdb_final

Repository files navigation

CI/CD для проекта YaMDb API

example workflow

Описание

Проект YaMDb собирает отзывы пользователей на произведения. Произведения делятся на категории: 'Книги', 'Фильмы', 'Музыка'. Список категорий может быть расширен администратором. Сами произведения в YaMDb не хранятся, здесь нельзя посмотреть фильм или послушать музыку. В каждой категории есть произведения: книги, фильмы или музыка. Например, в категории 'Книги' могут быть произведения 'Винни-Пух и все-все-все' и 'Марсианские хроники', а в категории 'Музыка' — песня 'Давеча' группы 'Насекомые' и вторая сюита Баха. Произведению может быть присвоен жанр из списка предустановленных. Новые жанры может создавать только администратор.

Благодарные или возмущённые пользователи оставляют к произведениям текстовые отзывы и ставят произведению оценку в диапазоне от одного до десяти; из пользовательских оценок формируется усреднённая оценка произведения — рейтинг. На одно произведение пользователь может оставить только один отзыв.

Применяемые технологии

Python Django Django REST Framework Simple JWT gunicorn Postgres Nginx Docker Docker-Compose

Docker Hub GitHub%20Actions Yandex.Cloud

Установка сервиса

Проверьте установлен ли у вас Docker

sudo docker -v

Если Docker отсутствует, то необходимо его установить. Вместе с Docker также устанавливается Docker Compose. После установки, проверьте установлена ли у вас Docker Compose версии 2.5.0 или новее:

sudo docker-compose -v

Если версия Docker Compose ниже 2.5.0 необходимо обновить Docker Compose.

Клонировать репозиторий:

git clone git@github.com:vasilekx/yamdb_final.git

Перейти в папку infra

cd infra

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

DB_ENGINE=django.db.backends.postgresql # указываем, что работаем с postgresql
POSTGRES_DB=postgres_db_1 # имя базы данных
POSTGRES_USER=postgres_user_1 # логин для подключения к базе данных
POSTGRES_PASSWORD=qawsed123456 # пароль для подключения к БД (установите свой)
DB_HOST=db # название сервиса (контейнера)
DB_PORT=5432 # порт для подключения к БД
DJANGO_SECRET_KEY='DJANGO_SECRET_KEY' # секретный ключ Django
DJANGO_ALLOWED_HOSTS='web localhost 127.0.0.1 [::1]' # cписок хостов/доменов, для которым доступен проект

Создать и запустить контейнеры:

sudo docker-compose up -d

Обзор команд для работы с docker-compose.

Выполнить миграции:

sudo docker-compose exec web python manage.py migrate

Создать суперпользователя:

sudo docker-compose exec web python manage.py createsuperuser

Собирать статические файлы:

sudo docker-compose exec web python manage.py collectstatic --no-input

Заполнить базу данными:

sudo docker-compose exec web python manage.py loaddata fixtures.json

Альтернативный способ заполнения базы данными из фаилов cvs

Работает только на пустой базе!

sudo docker-compose exec web python manage.py data_import

Доступ к YaMDb API

http://localhost/api/v1/

Документация к YaMDb API

http://localhost/redoc/

Административная панель

http://localhost/admin/

Примеры запросов к API

Регистрация нового пользователя:

Доступно без токена

POST-запрос:

http://localhost/api/v1/auth/signup/

Тело запроса:

{
  "email": "new_user@test.ru",
  "username": "new_user"
}

Ответ:

{
  "email": "new_user@test.ru",
  "username": "new_user"
}

Сообщение с токеном на email:

From: noreply@apiyamdb.ru
To: new_user@test.ru
Date: Mon, 26 Dec 2022 18:28:25 -0000

Ваш проверочный код rvKSy6rsRS.

Получение списка всех жанров:

Доступно без токена

GET-запрос:

http://localhost/api/v1/genres/

Ответ:

{
    "count": 15,
    "next": "http://localhost/api/v1/genres/?page=2",
    "previous": null,
    "results": [
        {
            "name": "Rock-n-roll",
            "slug": "rock-n-roll"
        },
        {
            "name": "Баллада",
            "slug": "ballad"
        },
        {
            "name": "Вестерн",
            "slug": "western"
        },
        {
            "name": "Гонзо",
            "slug": "gonzo"
        },
        {
            "name": "Детектив",
            "slug": "detective"
        },
        {
            "name": "Драма",
            "slug": "drama"
        },
        {
            "name": "Классика",
            "slug": "classical"
        },
        {
            "name": "Комедия",
            "slug": "comedy"
        },
        {
            "name": "Рок",
            "slug": "rock"
        },
        {
            "name": "Роман",
            "slug": "roman"
        }
    ]
}

Будущая доработка:

  • Отправка проверочного кода на электронную почту пользователя при регистрации.

Авторы

  1. Владислав Василенко (vasilekx) - управление пользователями
  2. Писарева Светлана (V0ronaVk0r0ne) - категории Categories, жанры Genres и произведения (Titles)
  3. Виктор (ViktorLuka) - отзывы (Review) и комментарии (Comments)