YaMDb - каталог фильмов, книг и музыкальных альбомов с системой рейтингов, отзывов и комментариев к отзывам.
Проект YaMDb является учебным и представляет собой каталог художественных произведений различных категорий. Например, произведения могут делиться на категории Книги
, Фильмы
, Музыка
. Список категорий может быть расширен новыми категориями через интерфейс администратора в Django. Сами произведения в каталоге не хранятся. К произведениям из каталога пользователи могут оставлять отзывы и выставлять оценки. К отзывам пользователи могут оставлять свои комментарии.
Python 3.7
Django 2.2.16
Django rest framework 3.12.4
Gunicorn 20.0.4
Psycopg2 binary 2.9.3
Проект упакован в связанные контейнеры Docker:
- контейнер для Django-проекта (образ python:3.7-slim);
- контейнер для базы данных Postgres (образ postgres:13.0-alpine);
- контейнер для веб-сервера Nginx (nginx:1.21.3-alpine).
В env-файле директории infra должны храниться переменные окружения для работы с базой данных. Пример наполнения env-файла:
DB_ENGINE=django.db.backends.postgresql
DB_NAME=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=12345
DB_HOST=db DB_PORT=5432
- Развернуть проект:
docker-compose up -d
- Выполнить миграции, создать суперпользователя и собрать статику:
docker-compose exec web python manage.py migrate
docker-compose exec web python manage.py createsuperuser
docker-compose exec web python manage.py collectstatic --no-input
docker-compose exec web python manage.py loaddata fixtures.json
YaMDb API
позволяет работать со следующими сущностями:
- Пользователи сервиса;
- Категории произведений;
- Жанры произведений;
- Произведения;
- Отзывы к произведениям;
- Комментарии к отзывам;
YaMDb API
позволяет:
- получить список всех пользователей, создать пользователя, получить пользователя по
username
, изменить данные пользователя поusername
, удалить пользователя поusername
, получить данные своей учетной записи, изменить данные своей учетной записи; - получить список всех произведений; создать отзывы на конкретное произведение с выставлением оценки в диапазоне
от 1 до 10
или без оценки; получать информацию об произведении, включая его рейтинг, который рассчитывается как среднее от всех оценок, выставленных пользователями для данного произведения, обновить информацию о произведении, удалять произведение; - получать список всех категорий, создать категорию, удалить категорию;
- получить список всех жанров, создать жанр, удалить жанр;
- получить список всех отзывов, создать новый отзыв, получить отзыв, частично обновить отзыв, удалить отзыв;
Подробная документация по API в формате Redoc доступна по адресу
http://127.0.0.1:8000/redoc
Получение списка произведений [GET]
http://127.0.0.1:8000/api/v1/titles/
Добавление произведения [POST]
http://127.0.0.1:8000/api/v1/titles/
Получение списка отзывов к произведению title_id [GET]
http://127.0.0.1:8000/api/v1/titles/{title_id}/reviews/
Добавление комментария к отзыву [POST]
http://127.0.0.1:8000/api/v1/titles/{title_id}/reviews/{review_id}/comments/
- Клонировать репозиторий c GitHub
$ git clone https://github.com/dvnesteroff/api_yamdb.git
- Создать виртуальное окружение
$ python -m venv venv
- Запустить виртуальное окружение
$ source venv/Scripts/activate
- Обновить менеджер пакетов pip
$ python -m pip install --upgrade pip
- Установить зависимости из requirements.txt
$ pip install -r requirements.txt
- Выполнить миграции
$ python manage.py migrate
- Выполнить импорт начальных данных (опционально)
$ python manage.py load-data
- Запустить проект
$ python manage.py runserver
The MIT License (MIT)
Студенты Яндекс.Практикум, Когорта 12+, курс "API: интерфейс взаимодействия программ": Дарья Матвиевская, Елизавета Лобачевская, Вячеслав Казаков, Денис Нестеров