{"id":24409303,"url":"https://github.com/belyashnikovatn/api_yamdb","last_synced_at":"2025-12-29T23:05:17.770Z","repository":{"id":259170111,"uuid":"835364780","full_name":"belyashnikovatn/api_yamdb","owner":"belyashnikovatn","description":"Сервис для публикации отзывов на произведения разных категорий и жанров.","archived":false,"fork":false,"pushed_at":"2024-08-08T18:46:02.000Z","size":220,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-20T05:56:23.619Z","etag":null,"topics":["api","django","drf","jwt","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/belyashnikovatn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-29T17:23:07.000Z","updated_at":"2024-10-27T14:23:54.000Z","dependencies_parsed_at":"2024-10-23T07:47:50.518Z","dependency_job_id":"c03a3fe0-b41b-4dc9-99f0-b72c047e8ffe","html_url":"https://github.com/belyashnikovatn/api_yamdb","commit_stats":null,"previous_names":["belyashnikovatn/api_yamdb"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belyashnikovatn%2Fapi_yamdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belyashnikovatn%2Fapi_yamdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belyashnikovatn%2Fapi_yamdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/belyashnikovatn%2Fapi_yamdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/belyashnikovatn","download_url":"https://codeload.github.com/belyashnikovatn/api_yamdb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243380068,"owners_count":20281695,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","django","drf","jwt","python"],"created_at":"2025-01-20T05:56:31.168Z","updated_at":"2025-12-29T23:05:17.753Z","avatar_url":"https://github.com/belyashnikovatn.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Командный проект YaMDb\nПроект YaMDb собирает **отзывы** пользователей на **произведения**. Сами произведения в YaMDb не хранятся, здесь нельзя посмотреть фильм или послушать музыку. Произведения делятся на **категории**, такие как «Книги», «Фильмы», «Музыка». Например, в категории «Книги» могут быть произведения «Винни-Пух и все-все-все» и «Марсианские хроники», а в категории «Музыка» — песня «Давеча» группы «Жуки» и вторая сюита Баха. Список категорий может быть расширен (например, можно добавить категорию «Изобразительное искусство» или «Ювелирка»). Произведению может быть присвоен **жанр** из списка предустановленных (например, «Сказка», «Рок» или «Артхаус»). Добавлять произведения, категории и жанры может только администратор. Благодарные или возмущённые пользователи оставляют к произведениям текстовые **отзывы** и ставят произведению оценку в диапазоне от одного до десяти (целое число); из пользовательских оценок формируется усреднённая оценка произведения — **рейтинг** (целое число).  **На одно произведение пользователь может оставить только один отзыв.** Пользователи могут оставлять **комментарии** к отзывам.Добавлять отзывы, комментарии и ставить оценки могут только аутентифицированные пользователи.\n\nЦель проекта — научиться работать в команде и с git.   \nПодробное ТЗ — доки Redoc.\n\n## Команда\n\n**Тим-лид:** [Беляшникова Татьяна](https://github.com/belyashnikovatn)\n- Titles, Genres, Categories (модели, вью, сериализаторы, маршруты),\n- Иморт данных из .csv-файлов.  \n**Разработчик 1:** [Иванов Артем](https://github.com/temaivanov)\n- Users (модель, вью, сериализатор, маршруты),\n- SignUpView и TokenView, сериализаторы, настройка токена,\n- Пермишены\n- Система подтверждения через email.  \n**Разработчик 2:** [Курмалеев Руслан](https://github.com/lightningrusleen)\n- Reviews, Comments (модели, вью, сериализаторы, маршруты),\n- Рейтинг произведений.\n\n\n## Содержание\n- [Технологии](#технологии)\n- [Запуск проекта](#запуск-проекта)\n- [Реализация](#реализация)\n- [Документация](#документация)\n\n## Технологии:\nPython + Django REST Framework + аутентификация access JWT-токен\n\n\n## Запуск проекта:\nКлонировать репозиторий и перейти в него в командной строке:\n\n```bash\n git clone git@github.com:belyashnikovatn/api_yamdb.git\n```\n```bash\n cd api_yamdb\n ```\nCоздать и активировать виртуальное окружение:\n```bash\n python3 -m venv env\n ```\n ```bash\n source env/bin/activate\n ```\n Установить зависимости из файла requirements.txt:\n ```bash\n python3 -m pip install --upgrade pip\n ```\n ```bash\npip install -r requirements.txt\n ```\n Выполнить миграции:\n ```bash\npython3 manage.py migrate\n ```\n Запустить проект:\n ```bash\npython3 manage.py runserver\n ```\n\n Дополнительно:\n Загрузить данные из csv-файлов:\n ```bash\npython3 manage.py import_csv_data\n ```\n\n## Реализация\nНиже будет кракто представлена структура проекта, с указанием основных техник, использованных в работе.\n\n### Данные:\n Используемые модели данных, расположеные в review/models.py:\n- **NameSlugModel** (базовая модель для Category и Genre),\n- **Category**,\n- **Genre**,\n- **Title**,\n- **GenreTitle** (для связи многие ко многим),\n- **AuthorTextPubDateBaseModel** (базовая модель для Review и Comment),\n- **Review**,\n- **Comment**,\nМодель данных **User** была переопределена, и вынесена в отдельное приложение users.\n\n### Маршрутизация\n**Entry point:** api_yamdb/urls.py \n- admin/ - вход в администраторскую панель,\n- redoc/ - ReDoc-документация к АПИ\n- api/ -\u003e **api/urls.py**\n**Маршруты приложения api:** - используются встроенные маршруты класса DefaultRouter для каждого из классов набора обработчиков запросов -- ViewSet.\n\nНапример, по умолчанию:\n\n- GET /titles/: Получить список всех произведений.\n- POST /titles/: Добавить новое произведение.\n- GET /titles/{titles_id}/: Получение информации о произведении.\n- PATCH /titles/{titles_id}/: Частично обновить информацию о произведении.\n- DELETE /titles/{titles_id}/: Удалить произведение.\n\n### Регистрация и аутентификация\n\nДля аутентификации пользователей после регистрации используется access JWT-токен (Bearer, lifetime == 1 day)\n\nНапример:\n1. Пользователь отправляет POST-запрос на добавление нового пользователя с параметрами email и username на эндпоинт **/api/v1/auth/signup/**.\n2. YaMDB отправляет письмо с кодом подтверждения (confirmation_code) на адрес email.\n3. Пользователь отправляет POST-запрос с параметрами username и confirmation_code на эндпоинт **/api/v1/auth/token/**, в ответе на запрос ему приходит token (JWT-токен).\n\n### Логика представления данных (Views)\nДля обработки пользовательских запросов и представления данных моделей применяются ViewSets. Вьюсеты содержат в себе встроенную реализацию методов для 5 основных типов запросов.\n\nСтандартные методы внутри вьюсетов:\n\n- create: Создание экземпляра (POST запрос).\n- retrieve: Получение экземпляра по идентификатору (GET запрос).\n- list: Получение списка всех экземпляров (GET запрос).\n- update: Обновление экземпляра целиком (PUT запрос).\n- partial_update: Частичное обновление экземпляра (PATCH запрос).\n- destroy: Удаление экземпляра (DELETE запрос).\n\nВ проекте использованы следующие вьюсеты:\n- UserViewSet\n- NameSlugModelViewSet (базовая модель для наследования)\n- GenreViewSet\n- CategoryViewSet\n- TitleViewSet\n- ReviewViewSet\n- CommentViewSet\n\nДля более гибкой настройки отдельных вью применяются миксины и дженерики.\n\n\n### Сериализаторы\nДля каждого из из вью-классов и вьюсетов применяются свои сериализаторы данных.\n- SignUpSerializer\n- TokenSerializer\n- UserSerializer\n- GenreSerializer\n- TitleSerializer\n- CommentSerializer\n\nДля представления данных из связанных таблиц (в ForeignKey-полях) в наглядном виде используются SlugRelatedField.\n\nВ сериализаторах происходит валидация данных конкретных полей, и совокупного payload.\n\nВ большинстве сериализаторов происходит наследование от serializers.ModelSerializer; в SignUpSerializer происходит наследование от serializers.Serializer, что позволяет реализовать логику обновления код подтверждения в эндпоинте регистрации /api/v1/auth/signup/.\n\n### Пермишены\n\nВо вьюсетах и вью-классах используются собственные классы пермишенов. Пермишены на уровне проекта отсутствуют.\n\n## Документация и примеры работы АПИ\n\nПосле успешного запуска проекта на локальной машине, необходимо перейти по ендпоинту /redoc/ для получения актуальной документации и примеров работы данного АПИ.\n\nПримеры:  \n- Регистрация нового пользователя  \nЗапрос http://127.0.0.1:8000/api/v1/auth/signup/ \n```\n{\n\"email\": \"user@example.com\",\n\"username\": \"^w\\\\Z\"\n}\n```\nОтвет\n```\n{\n  \"email\": \"string\",\n  \"username\": \"string\"\n}\n```\n- Получение JWT-токена\nЗапрос http://127.0.0.1:8000/api/v1/auth/token/\n```\n{\n  \"username\": \"^w\\\\Z\",\n  \"confirmation_code\": \"string\"\n}\n```\nОтвет\n```\n{\n  \"token\": \"string\"\n}\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbelyashnikovatn%2Fapi_yamdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbelyashnikovatn%2Fapi_yamdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbelyashnikovatn%2Fapi_yamdb/lists"}