Проект YaMDb собирает отзывы (Review) пользователей на произведения (Titles). Произведения делятся на категории: «Книги», «Фильмы», «Музыка». Список категорий (Category) может быть расширен администратором (например, можно добавить категорию «Изобразительное искусство» или «Ювелирка»). Сами произведения в YaMDb не хранятся, здесь нельзя посмотреть фильм или послушать музыку. В каждой категории есть произведения: книги, фильмы или музыка. Например, в категории «Книги» могут быть произведения «Винни-Пух и все-все-все» и «Марсианские хроники», а в категории «Музыка» — песня «Давеча» группы «Насекомые» и вторая сюита Баха. Произведению может быть присвоен жанр (Genre) из списка предустановленных (например, «Сказка», «Рок» или «Артхаус»). Новые жанры может создавать только администратор. Благодарные или возмущённые пользователи оставляют к произведениям текстовые отзывы (Review) и ставят произведению оценку в диапазоне от одного до десяти (целое число); из пользовательских оценок формируется усреднённая оценка произведения — рейтинг (целое число). На одно произведение пользователь может оставить только один отзыв.
- Django 2.2.16
- pytest 6.2.4
- pytest-pythonpath 0.7.3
- pytest-django 4.4.0
- djangorestframework 3.12.4
- djangorestframework-simplejwt 4.7.2
- django-filter 2.4.0
- PyJWT 2.1.0
- requests 2.26.0
Клонировать репозиторий с GitHub
git clone git@github.com:boginskiy/api-Yamdb.git
Установить виртуальное окружение venv
python3 -m venv venv
Aктивировать виртуальное окружение venv
source venv/bin/activate
Обновить менеджер пакетов pip
python3 -m pip install --upgrade pip
Установить зависимости из файла requirements.txt
pip install -r requirements.txt
Выполнить миграции
python3 manage.py migrate
Создание суперпользователя
python3 manage.py createsuperuser
Запустить проект
python3 manage.py runserver
Регистрация нового пользователя. (POST): http://127.0.0.1:8000/api/v1/auth/signup/
{
"email": "string",
"username": "string"
}
- Использовать имя 'me' в качестве username запрещено
- Доступно любому пользователю
Получение JWT-токена. (POST): http://127.0.0.1:8000/api/v1/auth/token/
{
"username": "string"
"confirmation_code": "string"
}
- confirmation_code - при регистрации нового пользователя в директории проекта api_yamdb/sent_emails появляется файл.log в котором находится данный код
- Доступно любому пользователю
Получить спискок публикаций (GET): http://127.0.0.1:8000/api/v1/titles/
-
При запросах доступны параметры: category - фильтрует по полю slug категории (тип string); genre - фильтрует по полю slug жанра (тип string); name - фильтрует по названию произведения (тип string); year - фильтрует по году (тип integer);
-
Допустимы анонимные запросы от пользователей
Добавление произведения (POST): http://127.0.0.1:8000/api/v1/titles/
{
"name": "string",
"year": "integer",
"description": "string",
"genre": "Array of strings (Slug жанра)",
"category": "string (Slug категории)"
}
- Добавить произведение может только администратор
- Нельзя добавлять произведения, которые еще не вышли (год выпуска не может быть больше текущего)
- При добавлении нового произведения требуется указать уже существующие категорию и жанр
Получить публикацию (GET): http://127.0.0.1:8000/api/v1/titles/{titles_id}/
- {titles_id} - id произведения
- Допустимы анонимные запросы от пользователей
Частичное обновление информации о произведении (PUTCH): http://127.0.0.1:8000/api/v1/titles/{titles_id}/
{
"name": "string",
"year": 0,
"description": "string",
"genre": [
"string"
],
"category": "string"
}
- {titles_id} - id произведения
- Обновить произведение может только администратор
Удаление произведения (DELETE): http://127.0.0.1:8000/api/v1/titles/{titles_id}/
- {titles_id} - id произведения
- Удалить произведение может только администратор
Получение всех отзывов к произведению (GET): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/
- {titles_id} - id произведение с отзывом
- Допустимы анонимные запросы от пользователей
Добавление нового отзыва к произведению (POST): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/
{
"text": "string",
"score": 10
}
- {titles_id} - id произведение с отзывом
- Поле "score" устанавливается от 1 до 10
- Добавить отзыв к произведению может только авторизованный пользователь и только один раз
Получение отзыва к произведению по id (GET): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- Допустимы анонимные запросы от пользователей
Частичное обновление отзыва к произведению по id (PUTCH): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/
{
"text": "string",
"score": 8
}
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- Поле "score" устанавливается от 1 до 10
- Обновить отзыв может автор, модератор или администратор
Удаление отзыва к произведению по id (DELETE): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- Удалить отзыв может автор, модератор или администратор
Получение списка всех комментариев к отзыву. (GET): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/comments/
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- Допустимы анонимные запросы от пользователей
Добавить новый комментарий для отзыва по id. (POST): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/comments/
{
"text": "string"
}
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- Добавить комментарий к отзыву может только авторизованный пользователь неограниченное кол-во раз
Получить комментарий для отзыва по id. (GET): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/comments/{comment_id}/
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- {comment_id} - id комментария
- Допустимы анонимные запросы от пользователей
Частичное обновление комментария к отзыву. (PATCH): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/comments/{comment_id}/
{
"text": "string"
}
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- {comment_id} - id комментария
- Обновить комментарий может автор, модератор или администратор
Удаление комментария к отзыву по id (DELETE): http://127.0.0.1:8000/api/v1/titles/{titles_id}/reviews/{reviews_id}/comments/{comment_id}/
- {titles_id} - id произведение с отзывом
- {reviews_id} - id отзыва
- {comment_id} - id комментария
- Удалить комментарий может автор, модератор или администратор
Получение списка всех пользователей. (GET): http://127.0.0.1:8000/api/v1/users/
- При запросах доступны параметры: search - поиск по имени пользователя (username) (тип string);
- Доступно только администратору
Добавление пользователя. (POST): http://127.0.0.1:8000/api/v1/users/
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
- Поля email и username должны быть уникальными
- Доступно только администратору
Получение пользователя по username. (GET): http://127.0.0.1:8000/api/v1/users/{username}
- {username} - Username пользователя
- Доступно только администратору
Изменение данных пользователя по username. (PATCH): http://127.0.0.1:8000/api/v1/users/{username}
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
- Поля email и username должны быть уникальными
- Доступно только администратору
Удаление пользователя по username. (DELETE): http://127.0.0.1:8000/api/v1/users/{username}
- Доступно только администратору
Получение данных своей учетной записи. (GET): http://127.0.0.1:8000/api/v1/users/me/
- Доступно любому авторизованному пользователю
Изменение данных своей учетной записи. (PATCH): http://127.0.0.1:8000/api/v1/users/me/
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
}
- Поля email и username должны быть уникальными
- Доступно любому авторизованному пользователю
Одоевская Мария - python разработчик
Березин Владимир - python разработчик
Богинский Дмитрий - python разработчик, тимлид команды