YaMDb - это проект, который собирает отзывы пользователей на произведения, такие как книги, фильмы и музыка. Произведения разделены на категории, а каждое произведение может быть присвоено одному или нескольким жанрам. Новые жанры могут создаваться только администраторами. Пользователи имеют возможность оставлять текстовые отзывы и ставить оценки произведениям в диапазоне от одного до десяти. Из пользовательских оценок вычисляется средняя оценка произведения, которая определяет его рейтинг.
Проект поддерживает аутентификацию по JWT-токену и предоставляет методы GET, POST, PUT, PATCH и DELETE для взаимодействия с данными. Вся информация предоставляется в формате JSON.
- Python
- Django REST Framework
- Simple JWT (работа с JWT-токенами)
- django-filter (фильтрация запросов)
- SQLite (база данных)
- Git (система управления версиями)
Чтобы запустить проект, выполните следующие шаги:
- Клонируйте репозиторий:
git clone https://github.com/VlKazmin/api_yamdb/ cd api_yamdb - Создайте и активируйте виртуальное окружение:
python -m venv env source env/bin/activate - Установите зависимости из файла requirements.txt:
python -m pip install --upgrade pip pip install -r requirements.txt
- Выполните миграции:
python manage.py migrate
- Создайте суперпользователя:
python manage.py createsuperuser
- Загрузите начальные данные из CSV файлов:
python manage.py load_csv
- Запустите проект:
python manage.py runserver
Теперь ваш проект доступен по адресу http://127.0.0.1:8000/. Полная документация (redoc.yaml) доступна по адресу http://127.0.0.1:8000/redoc/. Вы также можете запустить тесты с помощью команды pytest, чтобы проверить работу модулей.
Пользователь отправляет POST-запрос с параметрами email и username на эндпоинт /api/v1/auth/signup/. Сервис YaMDb отправляет письмо с кодом подтверждения (confirmation_code) на указанный адрес email. Пользователь отправляет POST-запрос с параметрами username и confirmation_code на эндпоинт /api/v1/auth/token/, и в ответе на запрос ему приходит token (JWT-токен). Теперь пользователь может использовать полученный токен для работы с API проекта. После регистрации и получения токена, пользователь может отправить PATCH-запрос на эндпоинт /api/v1/users/me/ и заполнить свой профиль.
Проект предоставляет следующие ресурсы:
- Ресурс auth: аутентификация.
- Ресурс users: пользователи.
- Ресурс titles: произведения, к которым пишут отзывы (фильмы, книги, музыка).
- Ресурс categories: категории произведений (фильмы, книги, музыка).
- Ресурс genres: жанры произведений. Одно произведение может быть привязано к нескольким жанрам.
- Ресурс reviews: отзывы на произведения. Отзыв привязан к определенному произведению.
- Ресурс comments: комментарии к отзывам. Комментарий привязан к определенному отзыву.
Добавлена кастомная команда load_csv, которая позволяет загрузить данные из CSV файлов, находящихся в папке static/data, в базу данных. Эти данные включают в себя:
- Категории (category)
- Комментарии (comments)
- Жанры произведений (genre_title)
- Жанры (genre)
- Отзывы (review)
- Произведения (titles)
- Пользователи (users)
- Для использования команды load_csv выполните ее после миграции и перед запуском сервера. Это позволит инициализировать базу данных начальными данными из CSV файлов
{
"name": "Название произведения",
"year": 2023,
"description": "Описание произведения",
"genre": ["Жанр 1", "Жанр 2"],
"category": "Категория"
}{
"id": 1,
"name": "Название произведения",
"year": 2023,
"rating": 0.0,
"description": "Описание произведения",
"genre": [
{
"name": "Жанр 1",
"slug": "zhann-1"
},
{
"name": "Жанр 2",
"slug": "zhann-2"
}
],
"category": {
"name": "Категория",
"slug": "kategoriya"
}
}Этот пример демонстрирует HTTP-запрос типа POST для создания нового произведения (titles). В запросе указаны параметры, такие как название, год выпуска, описание, список жанров и категория произведения. В ответе от API возвращается информация о созданном произведении, включая его уникальный идентификатор (id), название, год выпуска, рейтинг, описание, список жанров и категория.
- Владислав Казьмин (GitHub: VlKazmin)
- Андрей Яхутин (GitHub: Andrei-yakh)
- Иосиф Огир (GitHub: Iosif477)