You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
API для сервиса отзывов на произведения (книги, фильмы, музыку).
📝 Описание
Проект YaMDb позволяет пользователям оставлять отзывы и оценки произведениям, а также комментировать отзывы других пользователей.
Технологии:
Python 3.10
Django 3.2.16
Django REST framework 3.12.4
djangorestframework-simplejwt 4.7.2
Как запустить проект:
Cоздать и активировать виртуальное окружение:
python -m venv env
Если у вас Linux/macOS
source venv/bin/activate
Если у вас windows
source venv/scripts/activate
python -m pip install --upgrade pip
Установить зависимости из файла requirements.txt:
pip install -r requirements.txt
Выполнить миграции:
python manage.py migrate
Запустить проект:
python manage.py runserver
🔐 Алгоритм регистрации пользователей
Отправка POST-запроса с email и username на /api/v1/auth/signup/
Получение кода подтверждения (confirmation_code) на email
Отправка POST-запроса с username и confirmation_code на /api/v1/auth/token/ для получения JWT-токена
(Опционально) Заполнение профиля через PATCH-запрос на /api/v1/users/me/
👥 Пользовательские роли
Роль
Права
Аноним
Просмотр описаний произведений, чтение отзывов и комментариев
Пользователь (user)
Чтение + публикация отзывов, комментарии, оценка произведений
Модератор (moderator)
Права пользователя + удаление любых отзывов/комментариев
Администратор (admin)
Полные права на управление контентом и пользователями
Суперюзер Django
Права администратора
Требования
Python 3.7+
Django 3.2+
DRF 3.12+
JWT
📄 API-документация
YaMDb API
запросы к API начинаются с /api/v1/
Описание
Проект YaMDb собирает отзывы пользователей на различные произведения.
Алгоритм регистрации пользователей
Пользователь отправляет POST-запрос на добавление нового пользователя с параметрами email и username на эндпоинт /api/v1/auth/signup/.
YaMDB отправляет письмо с кодом подтверждения (confirmation_code) на адрес email.
Пользователь отправляет POST-запрос с параметрами username и confirmation_code на эндпоинт /api/v1/auth/token/, в ответе на запрос ему приходит token (JWT-токен).
При желании пользователь отправляет PATCH-запрос на эндпоинт /api/v1/users/me/ и заполняет поля в своём профайле (описание полей — в документации).
Пользовательские роли
Аноним — может просматривать описания произведений, читать отзывы и комментарии.
Аутентифицированный пользователь (user) — может, как и Аноним, читать всё, дополнительно он может публиковать отзывы и ставить оценку произведениям (фильмам/книгам/песенкам), может комментировать чужие отзывы; может редактировать и удалять свои отзывы и комментарии. Эта роль присваивается по умолчанию каждому новому пользователю.
Модератор (moderator) — те же права, что и у Аутентифицированного пользователя плюс право удалять любые отзывы и комментарии.
Администратор (admin) — полные права на управление всем контентом проекта. Может создавать и удалять произведения, категории и жанры. Может назначать роли пользователям.
Получить код подтверждения на переданный email.
Права доступа: Доступно без токена.
Использовать имя 'me' в качестве username запрещено.
Поля email и username должны быть уникальными.
Должна быть возможность повторного запроса кода подтверждения.
Parameters:
No parametrs
Responses
Code
Description
200
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
2. /auth/token/
POST
Description:
Получение JWT-токена в обмен на username и confirmation code.
Права доступа: Доступно без токена.
Responses:
Code
Description
200
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
404
Пользователь не найден
3. /categories/
GET
Description:
Получить список всех категорий
Права доступа: Доступно без токена
Parameters:
Name
Located in
Description
Required
Schema
search
query
Поиск по названию категории
No
string
Responses
Code
Description
200
Удачное выполнение запроса
POST
Description:
Создать категорию.
Права доступа: Администратор.
Поле slug каждой категории должно быть уникальным.
Responses:
Code
Description
201
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
401
Необходим JWT-токен
403
Нет прав доступа
Security
Security Schema
Scopes
jwt-token
admin
4. /categories/{slug}/
DELETE
Description:
Удалить категорию.
Права доступа: Администратор.
Parameters:
Name
Located in
Description
Required
Schema
slug
path
Slug категории
Yes
string
Responses:
Code
Description
204
Удачное выполнение запроса
401
Необходим JWT-токен
403
Нет прав доступа
404
Категория не найдена
Security:
Security Schema
Scopes
jwt-token
admin
5. /genres/
GET
Description:
Получить список всех жанров.
Права доступа: Доступно без токена
Parameters:
Name
Located in
Description
Required
Schema
search
query
Поиск по названию жанра
No
string
Responses:
Code
Description
200
Удачное выполнение запроса
POST
Description:
Добавить жанр.
Права доступа: Администратор.
Поле slug каждого жанра должно быть уникальным.
Responses:
Code
Description
201
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
401
Необходим JWT-токен
403
Нет прав доступа
Security:
Security Schema
Scopes
jwt-token
admin
6. /genres/{slug}/
DELETE
Description:
Удалить жанр.
Права доступа: Администратор.
Parameters:
Name
Located in
Description
Required
Schema
slug
path
Slug жанра
Yes
string
Responses:
Code
Description
204
Удачное выполнение запроса
401
Необходим JWT-токен
403
Нет прав доступа
404
Жанр не найден
Security:
Security Schema
Scopes
jwt-token
admin
7. /titles/
GET
Description:
Получить список всех объектов.
Права доступа: Доступно без токена
Parameters:
Name
Located in
Description
Required
Schema
category
query
фильтрует по полю slug категории
No
string
genre
query
фильтрует по полю slug жанра
No
string
name
query
фильтрует по названию произведения
No
string
year
query
фильтрует по году
No
integer
Responses:
Code
Description
200
Удачное выполнение запроса
POST
Description:
Добавить новое произведение.
Права доступа: Администратор.
Нельзя добавлять произведения, которые еще не вышли (год выпуска не может быть больше текущего).
При добавлении нового произведения требуется указать уже существующие категорию и жанр.
Parameters:
No parametrs
Responses:
Code
Description
201
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
401
Необходим JWT-токен
403
Нет прав доступа
Security:
Security Schema
Scopes
jwt-token
admin
8. /titles/{titles_id}/
GET
Description:
Информация о произведении
Права доступа: Доступно без токена
Parameters:
Name
Located in
Description
Required
Schema
titles_id
path
ID объекта
Yes
integer
Responses:
Code
Description
200
Удачное выполнение запроса
404
Объект не найден
PATCH
Description:
Обновить информацию о произведении
Права доступа: Администратор
Parameters:
Name
Located in
Description
Required
Schema
titles_id
path
ID объекта
Yes
integer
Responses:
Code
Description
200
Удачное выполнение запроса
401
Необходим JWT-токен
403
Нет прав доступа
404
Объект не найден
Security:
Security Schema
Scopes
jwt-token
admin
DELETE
Description:
Удалить произведение.
Права доступа: Администратор.
Parameters:
Name
Located in
Description
Required
Schema
titles_id
path
ID объекта
Yes
integer
Responses:
Code
Description
204
Удачное выполнение запроса
401
Необходим JWT-токен
403
Нет прав доступа
404
Произведение не найдено
Security:
Security Schema
Scopes
jwt-token
admin
9. /titles/{title_id}/reviews/
GET
Description:
Получить список всех отзывов.
Права доступа: Доступно без токена.
Parameters:
Name
Located in
Description
Required
Schema
title_id
path
ID произведения
Yes
integer
Responses:
Code
Description
200
Удачное выполнение запроса
404
Произведение не найдено
POST
Description:
Добавить новый отзыв. Пользователь может оставить только один отзыв на произведение.
Права доступа: Аутентифицированные пользователи.
Parameters:
Name
Located in
Description
Required
Schema
title_id
path
ID произведения
Yes
integer
Responses:
Code
Description
201
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
401
Необходим JWT-токен
404
Произведение не найдено
Security:
Security Schema
Scopes
jwt-token
user,moderator,admin
10. /titles/{title_id}/reviews/{review_id}/
GET
Description:
Получить отзыв по id для указанного произведения.
Права доступа: Доступно без токена.
Parameters:
Name
Located in
Description
Required
Schema
title_id
path
ID произведения
Yes
integer
review_id
path
ID отзыва
Yes
integer
Responses:
Code
Description
200
Удачное выполнение запроса
404
Произведение или отзыв не найден
PATCH
Description:
Частично обновить отзыв по id.
Права доступа: Автор отзыва, модератор или администратор.
Parameters:
Name
Located in
Description
Required
Schema
title_id
path
ID произведения
Yes
integer
review_id
path
ID отзыва
Yes
integer
Responses:
Code
Description
200
Удачное выполнение запроса
400
Отсутствует обязательное поле или оно некорректно
401
Необходим JWT-токен
403
Нет прав доступа
404
Произведение не найдено
Security:
Security Schema
Scopes
jwt-token
user,moderator,admin
DELETE
Description:
Удалить отзыв по id
Права доступа: Автор отзыва, модератор или администратор.