# YaMDb API
REST API для сервиса YaMDb (Yet another Movie Database) — базы данных о фильмах, книгах и музыке.
Пользователи могут оставлять отзывы и оценки к произведениям, комментировать отзывы других пользователей.
## Основные функции
- **Регистрация пользователей** с подтверждением по email
- **JWT-аутентификация** для безопасного доступа к API
- **Управление произведениями** (фильмы, книги, музыка) с категориями и жанрами
- **Система отзывов** с оценками от 1 до 10
- **Комментарии** к отзывам других пользователей
- **Ролевая система**: пользователь, модератор, администратор
- **Автоматический расчет рейтинга** произведений на основе отзывов
- **Фильтрация и поиск** по произведениям
## Технологии
- Python
- Django
- Django REST Framework
- JWT
- SQLite
## Установка и запуск
### 1. Клонирование репозитория
```bash
git clone <repository-url>
cd api-yamdbpython -m venv venv
source venv/bin/activate # Linux/MacOS
venv\Scripts\activate # Windowspip install -r requirements.txtpython manage.py makemigrations
python manage.py migrateПроект включает скрипт для загрузки тестовых данных:
# Запуск скрипта наполнения базы данных
python manage.py load_csv_dataИли используйте готовый скрипт:
bash set_up_data.shpython manage.py createsuperuserpython manage.py runserverAPI будет доступно по адресу: http://localhost:8000/api/v1/
После запуска сервера документация доступна по адресу: http://localhost:8000/redoc/
POST /api/v1/auth/signup/
Content-Type: application/json
{
"email": "user@example.com",
"username": "username"
}Ответ:
{
"email": "user@example.com",
"username": "username"
}POST /api/v1/auth/token/
Content-Type: application/json
{
"username": "username",
"confirmation_code": "abc123def456"
}Ответ:
{
"token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..."
}GET /api/v1/titles/
Authorization: Bearer <your_token>Ответ:
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"name": "Интерстеллар",
"year": 2014,
"rating": 9,
"description": "Фантастический фильм о путешествии через червоточину...",
"genre": [
{"name": "Фантастика", "slug": "sci-fi"},
{"name": "Драма", "slug": "drama"}
],
"category": {"name": "Фильмы", "slug": "movies"}
}
]
}POST /api/v1/titles/1/reviews/
Authorization: Bearer <your_token>
Content-Type: application/json
{
"text": "Отличный фильм с глубоким смыслом!",
"score": 10
}Ответ:
{
"id": 1,
"text": "Отличный фильм с глубоким смыслом!",
"author": "username",
"score": 10,
"pub_date": "2023-10-01T12:00:00Z"
}POST /api/v1/titles/1/reviews/1/comments/
Authorization: Bearer <your_token>
Content-Type: application/json
{
"text": "Согласен, актерская игра просто великолепна!"
}Ответ:
{
"id": 1,
"text": "Согласен, актерская игра просто великолепна!",
"author": "another_user",
"pub_date": "2023-10-01T12:05:00Z"
}- Пользователи - кастомная модель с ролями (user, moderator, admin)
- Категории - категории произведений (фильмы, книги, музыка)
- Жанры - жанры произведений
- Произведения - фильмы, книги, музыка с автоматическим расчетом рейтинга
- Отзывы - отзывы пользователей с оценками
- Комментарии - комментарии к отзывам
Святослав Орел - mrsveagle@gmail.com
Дмитрий Чистяков - dmitry.chistyakovv@gmail.com
Гордей Ипатьев - cowboyg@yandex.ru
Проект разработан в рамках учебного курса по Django REST Framework.