https://github.com/feel2code/drf_api_pet_project
study project of REST API development (based on Django Rest Framework) on Python, using Docker container and deployment with GitHub Actions.
https://github.com/feel2code/drf_api_pet_project
django django-rest-framework docker github-actions
Last synced: 3 months ago
JSON representation
study project of REST API development (based on Django Rest Framework) on Python, using Docker container and deployment with GitHub Actions.
- Host: GitHub
- URL: https://github.com/feel2code/drf_api_pet_project
- Owner: feel2code
- Created: 2022-09-05T17:48:34.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-05-11T11:05:52.000Z (about 1 year ago)
- Last Synced: 2024-11-09T18:06:29.555Z (7 months ago)
- Topics: django, django-rest-framework, docker, github-actions
- Language: Python
- Homepage:
- Size: 60.5 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Проект YaMDb

## ОписаниеПроект YaMDb собирает отзывы пользователей на различные произведения.
### Регистрация пользователей
1. Пользователь отправляет POST-запрос на добавление нового пользователя с параметрами email и username на ```/api/v1/auth/signup/```.
2. YaMDB отправляет письмо с кодом подтверждения (confirmation_code) на адрес email.
3. Пользователь отправляет POST-запрос с параметрами username и confirmation_code на ```/api/v1/auth/token/```, в ответе на запрос ему приходит token (JWT-токен).
4. При желании пользователь отправляет PATCH-запрос на ```/api/v1/users/me/``` и заполняет поля в своём профайле (описание полей — в документации).### Пользовательские роли
+ **Аноним** — может просматривать описания произведений, читать отзывы и комментарии.
+ **Аутентифицированный пользователь (user)** — может, как и Аноним, читать всё, дополнительно он может публиковать отзывы и ставить оценку произведениям (фильмам/книгам/песенкам), может комментировать чужие отзывы; может редактировать и удалять свои отзывы и комментарии. Эта роль присваивается по умолчанию каждому новому пользователю.
+ **Модератор (moderator)** — те же права, что и у Аутентифицированного пользователя плюс право удалять любые отзывы и комментарии.
+ **Администратор (admin)** — полные права на управление всем контентом проекта. Может создавать и удалять произведения, категории и жанры. Может назначать роли пользователям.
+ **Суперпользователь Django** — обладает правами администратора (admin)## Основные технологии
+ Django
+ djangorestframework
+ djangorestframework-simplejwt
+ PyJWT## Запуск проекта
- Клонируйте репозиторий
- Создайте `.env` файл в директории `infra/`, на основе `.env.example`
>DB_ENGINE= # тип БД\
>DB_NAME= # название БД\
>POSTGRES_USER= # имя пользователя\
>POSTGRES_PASSWORD= # пароль\
>DB_HOST= # хост БД\
>DB_PORT= # порт (по умолчанию 5432)
- Соберите образ
`$ cd infra && docker-compose up -d --build`
- Примените миграции
`$ docker-compose exec web python manage.py migrate`
- Создайте админа
`$ docker-compose exec web python manage.py createsuperuser`
- Соберите статику
`$ docker-compose exec web python manage.py collectstatic --no-input`### Остановка проекта
- В терминале выполните команду:
`$ docker-compose down -v`### Наполнение и резервное копирование базы данных
- Создать резервную копию базы данных:
`$ docker-compose exec web python manage.py dumpdata > fixtures.json`- Наполнить базу данных из резервной копии:
`$ docker-compose exec web python manage.py loaddata fixtures.json`### Основной функционал API
[Документация проекта http://localhost:8000/redoc/](http://localhost:8000/redoc/)Примеры запросов:
- Регистрация
`POST`
> /auth/signup/`Content type: application/json`
> {\
> "email": "string",\
> "username": "string"\
> }- Получение JWT-токена
`POST`
> /auth/token/`Content type: application/json`
> { \
> "username": "string",\
> "confirmation_code": "string"\
> }- Получение списка всех категорий произведений
`GET`
> /categories/Пример ответа: \
`Content type: application/json`
> { \
> "count": 0,\
> "next": "string",\
> "previous": "string",\
> "results": [{\
> "name": "string",\
> "slug": "string"\
> }]\
> }Полные примеры запросов и ответов содержатся в [документации проекта](http://localhost:8000/redoc/).