«Отзывы на произведения»
Проект собирает отзывы пользователей на произведения. Произведения делятся на категории книги, фильмы и музыка.
Python 3.7.9
requests==2.26.0
django==2.2.16
djangorestframework==3.12.4
djangorestframework-simplejwt==4.7.2
PyJWT==2.1.0
pytest==6.2.4
pytest-django==4.4.0
pytest-pythonpath==0.7.3
django-filter~=21.1
Клонировать репозиторий:
git clone https://github.com/BU-Marina/api_yamdb
cd api_yamdb
Cоздать и активировать виртуальное окружение:
python -m venv env
Если у вас linux/MacOS:
. venv/bin/activate
Если у вас Windows:
. venv/Scripts/activate
Установить зависимости из файла requirements.txt:
python -m pip install --upgrade pip
pip install -r requirements.txt
Выполнить миграции из директории с файлом manage.py:
python manage.py makemigrations reviews
python manage.py migrate
Запустить проект:
python manage.py runserver
Запуск тестов
pytest
http://127.0.0.1:8000/redoc/
Пользователь отправляет POST-запрос с параметрами email и username на эндпоинт
/api/v1/auth/signup/
Сервис отправляет письмо с кодом подтверждения на указанный адрес.
Пользователь отправляет POST-запрос с параметрами username и confirmation_code на эндпоинт
/api/v1/auth/token/
В ответ на запрос приходит токен, который необходимо передавать в заголовке всех запросов с параметром Bearer
После регистрации и получения токена пользователь может отправить PATCH-запрос на эндпоинт
/api/v1/users/me/
и заполнить поля в своём профайле
Пользователя может создать администратор — через админ-зону сайта или через POST-запрос на специальный эндпоинт
api/v1/users/
(описание полей запроса для этого случая — в документации). В этот момент письмо с кодом подтверждения пользователю не отправляется. После этого пользователь должен самостоятельно отправить GET-запрос со своими email и username на эндпоинт
/api/v1/auth/signup/
в ответ ему должно прийти письмо с кодом подтверждения. Далее пользователь отправляет POST-запрос с параметрами username и confirmation_code на эндпоинт
/api/v1/auth/token/
в ответе на запрос ему приходит token (JWT-токен), как и при самостоятельной регистрации.
Сам API доступен по адресу
GET..../api/v1/
Примеры запросов к API:
Пример POST-запроса с токеном Администратора (Добавлять и вносить изменения в категории может только администратор, чтение доступно любому незарегистрированному пользователю):
Добавление новой категории:
POST .../api/v1/categories/
{
"name": "string",
"slug": "string"
}
Ответ:
{
"name": "string",
"slug": "string"
}
Пример POST-запроса с токеном Администратора (Добавлять и вносить изменения в жанры может только администратор, чтение доступно любому незарегистрированному пользователю):
Добавление жанра:
POST .../api/v1/genres/
{
"name": "string",
"slug": "string"
}
Ответ:
{
"name": "string",
"slug": "string"
}
Пример POST-запроса с токеном Администратора (Добавлять и вносить изменения в произведения может только администратор, чтение доступно любому незарегистрированному пользователю):
Добавление произведения:
POST .../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"
}
}
Пример GET-запроса незарегистрированного пользователя (без токена):
Получаем список всех произведений/жанров/категорий по 5 на странице.
GET .../api/v1/titles/
GET .../api/v1/genres/
GET .../api/v1/categories/
Ответ (для произведений):
[
{
"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"
}
}
]
}
]
Авторы Паша Калинин, Марина Бузина, Виталий Осташов