Проект YaMDb собирает отзывы пользователей на различные произведения.
Клонировать репозиторий и перейти в него в командной строке:
git clone https://github.com/esaviv/api_yamdb.git
cd api_yamdb
Cоздать и активировать виртуальное окружение:
python3 -m venv venv | python -m venv venv
source env/bin/activate | source venv/Scripts/activate
python3 -m pip install --upgrade pip | python -m pip install --upgrade pip
Установить зависимости из файла requirements.txt:
pip install -r requirements.txt
Выполнить миграции:
python3 api_yamdb/manage.py migrate | python api_yamdb/manage.py migrate
Запустить проект:
python3 api_yamdb/manage.py runserver | python api_yamdb/manage.py runserver
- esaviv: система регистрации и аутентификации, права доступа, работа с токеном, система подтверждения через e-mail.
- RoutTufuch: модели, view и эндпойнты для произведений, категорий, жанров; реализация импорта данных из csv файлов.
- Zhenia1997: отзывы, комментарии, рейтинг произведений.
- Пользователь отправляет 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
) — полные права на управление всем контентом проекта. Может создавать и удалять произведения, категории и жанры. Может назначать роли пользователям. - Суперюзер Django — обладет правами администратора (
admin
).
Регистрация пользователей и выдача токенов.
Получить код подтверждения на переданный email
. Права доступа: Доступно без токена. Использовать имя 'me' в качестве username запрещено. Поля email
и username
должны быть уникальными.
/api/v1/auth/signup/
{
"email": "user@example.com",
"username": "string"
}
Ответ:
{
"email": "string",
"username": "string"
}
Получение JWT-токена в обмен на username и confirmation code. Права доступа: Доступно без токена.
/api/v1/auth/token/
{
"username": "string",
"confirmation_code": "string"
}
Ответ:
{
"token": "string"
}
Пользователи.
Получить список всех пользователей. Права доступа: Администратор
/api/v1/users/
Ответ:
{
"count": 0,
"next": "string",
"previous": "string",
"results": [
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
]
}
Добавить нового пользователя. Права доступа: Администратор Поля email
и username
должны быть уникальными.
/api/v1/users/
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Ответ:
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Получить пользователя по username. Права доступа: Администратор
/api/v1/users/{username}/
Ответ:
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Изменить данные пользователя по username. Права доступа: Администратор. Поля email
и username
должны быть уникальными.
/api/v1/users/{username}/
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Ответ:
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Удалить пользователя по username. Права доступа: Администратор.
/api/v1/users/{username}/
Получить данные своей учетной записи Права доступа: Любой авторизованный пользователь.
/api/v1/users/me/
Ответ:
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Изменить данные своей учетной записи. Права доступа: Любой авторизованный пользователь. Поля email
и username
должны быть уникальными.
/api/v1/users/me/
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string"
}
Ответ:
{
"username": "string",
"email": "user@example.com",
"first_name": "string",
"last_name": "string",
"bio": "string",
"role": "user"
}
Произведения, к которым пишут отзывы (определённый фильм, книга или песенка).
Получить список всех объектов. Права доступа: Доступно без токена.
/api/v1/titles/
Ответ:
{
"count": 0,
"next": "string",
"previous": "string",
"results": [
{
"id": 0,
"name": "string",
"year": 0,
"rating": 0,
"description": "string",
"genre": [
{
"name": "string",
"slug": "string"
}
],
"category": {
"name": "string",
"slug": "string"
}
}
]
}
Добавить новое произведение. Права доступа: Администратор. Нельзя добавлять произведения, которые еще не вышли (год выпуска не может быть больше текущего). При добавлении нового произведения требуется указать уже существующие категорию и жанр.
/api/v1/titles/
{
"name": "string",
"year": 0,
"description": "string",
"genre": [
"string"
],
"category": "string"
}
Ответ:
{
"id": 0,
"name": "string",
"year": 0,
"rating": 0,
"description": "string",
"genre": [
{
"name": "string",
"slug": "string"
}
],
"category": {
"name": "string",
"slug": "string"
}
}
Информация о произведении. Права доступа: Доступно без токена.
/api/v1/titles/{titles_id}/
Ответ:
{
"id": 0,
"name": "string",
"year": 0,
"rating": 0,
"description": "string",
"genre": [
{
"name": "string",
"slug": "string"
}
],
"category": {
"name": "string",
"slug": "string"
}
}
Обновить информацию о произведении. Права доступа: Администратор.
/api/v1/titles/{titles_id}/
{
"name": "string",
"year": 0,
"description": "string",
"genre": [
"string"
],
"category": "string"
}
Ответ:
{
"id": 0,
"name": "string",
"year": 0,
"rating": 0,
"description": "string",
"genre": [
{
"name": "string",
"slug": "string"
}
],
"category": {
"name": "string",
"slug": "string"
}
}
Удалить произведение. Права доступа: Администратор.
/api/v1/titles/{titles_id}/
Категории жанров.
Получить список всех жанров. Права доступа: Доступно без токена.
/api/v1/genres/
Ответ:
{
"count": 0,
"next": "string",
"previous": "string",
"results": [
{
"name": "string",
"slug": "string"
}
]
}
Добавить жанр. Права доступа: Администратор. Поле slug
каждой категории должно быть уникальным.
/api/v1/genres/
{
"name": "string",
"slug": "string"
}
Ответ:
{
"name": "string",
"slug": "string"
}
Удалить жанр. Права доступа: Администратор.
/api/v1/genres/{slug}/
Категории (типы) произведений.
Получить список всех категорий Права доступа: Доступно без токена.
/api/v1/categories/
Ответ:
{
"count": 0,
"next": "string",
"previous": "string",
"results": [
{
"name": "string",
"slug": "string"
}
]
}
Создать категорию. Права доступа: Администратор. Поле slug
каждой категории должно быть уникальным.
/api/v1/users/
{
"name": "string",
"slug": "string"
}
Ответ:
{
"name": "string",
"slug": "string"
}
Удалить категорию. Права доступа: Администратор.
/api/v1/categories/{slug}/
Отзывы.
Получить список всех отзывов. Права доступа: Доступно без токена.
/api/v1/titles/{title_id}/reviews/
Ответ:
{
"count": 0,
"next": "string",
"previous": "string",
"results": [
{
"id": 0,
"text": "string",
"author": "string",
"score": 1,
"pub_date": "2019-08-24T14:15:22Z"
}
]
}
Добавить новый отзыв. Пользователь может оставить только один отзыв на произведение. Права доступа: Аутентифицированные пользователи.
/api/v1/titles/{title_id}/reviews/
{
"text": "string",
"score": 1
}
Ответ:
{
"id": 0,
"text": "string",
"author": "string",
"score": 1,
"pub_date": "2019-08-24T14:15:22Z"
}
Получить отзыв по id для указанного произведения. Права доступа: Доступно без токена.
/api/v1/titles/{title_id}/reviews/{review_id}/
Ответ:
{
"id": 0,
"text": "string",
"author": "string",
"score": 1,
"pub_date": "2019-08-24T14:15:22Z"
}
Частично обновить отзыв по id. Права доступа: Автор отзыва, модератор или администратор.
/api/v1/titles/{title_id}/reviews/{review_id}/
{
"text": "string",
"score": 1
}
Ответ:
{
"id": 0,
"text": "string",
"author": "string",
"score": 1,
"pub_date": "2019-08-24T14:15:22Z"
}
Удалить отзыв по id Права доступа: Автор отзыва, модератор или администратор.
/api/v1/titles/{title_id}/reviews/{review_id}/
Комментарии к отзывам.
Получить список всех комментариев к отзыву по id. Права доступа: Доступно без токена.
/api/v1/titles/{title_id}/reviews/{review_id}/comments/
Ответ:
{
"count": 0,
"next": "string",
"previous": "string",
"results": [
{
"id": 0,
"text": "string",
"author": "string",
"pub_date": "2019-08-24T14:15:22Z"
}
]
}
Добавить новый комментарий для отзыва. Пользователь может оставить только один отзыв на произведение. Права доступа: Аутентифицированные пользователи.
/api/v1/titles/{title_id}/reviews/{review_id}/comments/
{
"text": "string"
}
Ответ:
{
"id": 0,
"text": "string",
"author": "string",
"pub_date": "2019-08-24T14:15:22Z"
}
Получить комментарий для отзыва по id. Права доступа: Доступно без токена.
/api/v1/titles/{title_id}/reviews/{review_id}/comments/{comment_id}/
Ответ:
{
"id": 0,
"text": "string",
"author": "string",
"pub_date": "2019-08-24T14:15:22Z"
}
Частично обновить комментарий к отзыву по id. Права доступа: Автор отзыва, модератор или администратор.
/api/v1/titles/{title_id}/reviews/{review_id}/comments/{comment_id}/
{
"text": "string"
}
Ответ:
{
"id": 0,
"text": "string",
"author": "string",
"pub_date": "2019-08-24T14:15:22Z"
}
Удалить комментарий к отзыву по id. Права доступа: Автор отзыва, модератор или администратор.
/api/v1/titles/{title_id}/reviews/{review_id}/comments/{comment_id}/