An open API service indexing awesome lists of open source software.

https://github.com/sevastiandolbilin/api_yamdb

api_yamdb
https://github.com/sevastiandolbilin/api_yamdb

django django-framework django-rest-framework pytest python simple-jwt sqlite

Last synced: about 2 months ago
JSON representation

api_yamdb

Awesome Lists containing this project

README

          

# Проект YaMDb

## Описание

**YaMDb** — это проект, который собирает отзывы пользователей на произведения различных категорий. Проект позволяет пользователям делиться мнениями о книгах, фильмах, музыке и других видах произведений. При этом сами произведения на платформе не хранятся. Пользователи могут оставлять текстовые отзывы, ставить оценки и комментировать чужие отзывы.

## Основная функциональность проекта
- **Категории произведений**: произведения делятся на категории, такие как "Книги", "Фильмы", "Музыка". Категории можно расширять.
- **Жанры произведений**: к произведению можно привязать жанр из предустановленного списка (например, "Рок", "Фантастика", "Артхаус").
- **Рейтинги**: пользователи могут оставлять отзывы с оценками от 1 до 10, на основе которых вычисляется усреднённая оценка произведения.
- **Комментарии**: пользователи могут оставлять комментарии к отзывам.
- Управление доступом через **права пользователя**.

Роли пользователей:
- **Аноним**: может только читать произведения, отзывы и комментарии.
- **Аутентифицированный пользователь**: может публиковать отзывы, ставить оценки произведениям, оставлять комментарии, а также редактировать и удалять свои отзывы и комментарии.
- **Модератор**: имеет права на редактирование и удаление любых отзывов и комментариев.
- **Администратор**: может управлять всеми данными проекта, в том числе добавлять произведения, категории и жанры, а также управлять пользователями и назначать им роли.

## Установка

Чтобы развернуть проект локально, выполните следующие шаги:

0. Клонируйте репозиторий:
```bash
git clone https://github.com/ShiroyashaSG/api_yamdb.git
```
1. Перейдите в директорию проекта:
```bash
cd api_yamdb
```
2. Cоздайте и активируйте виртуальное окружение:
```bash
python -m venv venv
source venv/bin/activate # Для Windows: venv\Scripts\activate
```
3. Установите зависимости из файла requirements.txt:
```bash
python3 -m pip install --upgrade pip
pip install -r requirements.txt
```
4. Создайте миграции:
```bash
python3 manage.py makemigrations
```
5. Примените миграции:
```bash
python3 manage.py migrate
```
6. Загрузите данные из csv - файлов в базу данных:
```bash
python3 manage.py import_data
```
7. Запустите сервер:
```bash
python3 manage.py runserver
```

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

### Получение списка произведений
***GET*** запрос на **/api/v1/titles/**

_Ответ:_
```json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"name": "Винни-Пух и все-все-все",
"year": 1969,
"rating": 9,
"description": "Добрая книга о приключениях медвежонка",
"genre": [
{
"name": "Сказка",
"slug": "skazka"
}
],
"category": {
"name": "Книги",
"slug": "books"
}
}
]
}
```

### Добавление отзыва на произведение
***POST*** запрос на **/api/v1/titles/{title_id}/reviews/**

_Тело запроса:_
```json
{
"text": "Замечательная книга!",
"score": 9
}
```
_Ответ:_
```json
{
"id": 1,
"text": "Замечательная книга!",
"author": "user123",
"score": 9,
"pub_date": "2024-01-01T00:00:00Z"
}
```

### Получение комментариев к отзыву
***GET*** запрос на **/api/v1/titles/{title_id}/reviews/{review_id}/comments/**

_Ответ:_
```json
{
"count": 1,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"text": "Полностью согласен!",
"author": "user456",
"pub_date": "2024-01-02T12:34:56Z"
}
]
}
```

### Регистрация пользователя
***POST*** запрос на **/api/v1/auth/signup/**

_Тело запроса:_
```json
{
"email": "user@example.com",
"username": "user123"
}
```
_Ответ:_
```json
{
"email": "user@example.com",
"username": "user123"
}
```

### Получение JWT-токена
***POST*** запрос на **/api/v1/auth/token/**

_Тело запроса:_
```json
{
"username": "user123",
"confirmation_code": "123456"
}
```
_Ответ:_
```json
{
"token": "your.jwt.token"
}
```

## Используемые технологии
* Python 3.9.0
* Django 3.2
* Фреймворк Django REST
* Simple JWT для аутентификации
* SQLite (по умолчанию)

## Лицензия
Проект лицензирован под лицензией `MIT`.