Skip to content

s1ntecs/infra_sp2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Python Django Django REST Framework PostgreSQL Nginx gunicorn docker

YaMDb api

Самая актуальная версия API всемирно известного YaMDb.

YaTube API это RESTful API, позволяющий создавать и редактировать отзывы на различные произведения, оценивать их и оставлять комментарии к отзывам. В основе проекта лежат Django и Django REST Framework. Проект подготовлен для работы с docker.

Особенности

  • Пишите свои ревью и ставьте оценки произведениям.
  • Авторизация происходит по токену.
  • Токен можно получить введя код подтверждения из электронного письма.
  • При просмотре информации о каком-либо произведении будет выведена его средняя оценка.
  • Для авторизованных пользователей присутствует возможность комментировать отзывы.

Технологии

  • Django - фреймворк, который включает в себя все необходимое для быстрой разработки различных веб-сервисовю
  • Django REST Framework - фреймворк, расширяющий возможности Django и позволяющий быстро писать RESTful API для Django-проектов.
  • Docker - это приложение для вашей среды Python, Wnidows, которое позволяет создавать контейнерные приложения и микросервисы и совместно использовать их. Конечно же YaTube API это ПО с открытым исходным кодом и публичным репозиторием на GitHub и (https://hub.docker.com/repository/docker/sintecs/yamdb/) на DockerHub.

Начало работы

Как запустить проект:

Клонировать GitHub репозиторий:

git clone https://github.com/s1ntecs/infra_sp2.git

Перейти в директорию infra

Необходимо создать файл переменных окружения .env без переменных окружения наш сервис не будет работать.
Образец заполнения файла можете посмотреть в example.env в директории infra.

После создания файла .env: Из директории infra вызвать (в командной строке (wsl))

  • docker-compose up -d --build # Команда собирает контейнеры и запускает их.

По окончании работы docker-compose сообщит, что контейнеры собраны и запущены.

Теперь в контейнере web нужно выполнить миграции, создать суперпользователя и собрать статику:

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 exec web python manage.py loaddata fixtures.json


API будет доступен по адресу:

http://localhost/api/v1/


## Пользовательские роли
```Аноним — может просматривать описания произведений, читать отзывы и комментарии.```

```Аутентифицированный пользователь (user) — может, как и Аноним, читать всё, дополнительно он может публиковать отзывы и ставить оценку произведениям (фильмам/книгам/песенкам), может комментировать чужие отзывы;может редактировать и удалять свои отзывы и комментарии. Эта роль присваивается по умолчанию каждому новому пользователю.```

```Модератор (moderator) — те же права, что и у Аутентифицированного пользователя плюс право удалять любые отзывы и комментарии.```

```Администратор (admin) — полные права на управление всем контентом проекта. Может создавать и удалять произведения, категории и жанры. Может назначать роли пользователям.```

```Суперюзер Django — обладет правами администратора (admin)```

## Примеры работы с API:

Получение списка всех категорий и создание новой(доступно только для роли 'Administrator') происходит на эндпоинте:

```sh
http://localhost/api/v1/categories/

Пример ответа при GET запросе с параметрами offset и count:

[
  {
    "count": 0,
    "next": "string",
    "previous": "string",
    "results": [
      {
        "name": "string",
        "slug": "string"
      }
    ]
  }
]

Редактирование категорий запрещено. Удаление категории происходит на эндпоинте:

http://localhost/api/v1/categories/{slug}/

Получение списка жанров и создание нового(доступно только для роли 'Administrator') происходит на эндпоинте:

http://localhost/api/v1/genres/

Пример ответа:

[
  {
    "count": 0,
    "next": "string",
    "previous": "string",
    "results": [
      {
        "name": "string",
        "slug": "string"
      }
    ]
  }
]

Получение конкретного жанра, а так же его редактирование запрещено. А удаление происходит на эндпоинте:

http://localhost/api/v1/genres/{slug}/

Получение списка произведений и создание нового происходит на эндпоинте:

http://localhost/api/v1/titles/

Пример ответа:

[
  {
    "id": 0,
    "title": "string",
    "slug": "string",
    "description": "string"
  }
]

Для конкретной группы доступен только метод GET(id - первичный ключ таблицы Groups) на эндпоинте:

http://localhost/api/v1/groups/{id}/

Пример ответа:

{
  "id": 0,
  "title": "string",
  "slug": "string",
  "description": "string"
}

Следующий эндпоинт возвращает все подписки пользователя, сделавшего запрос. Анонимные запросы запрещены (метод GET):

http://localhost/api/v1/follow/

Пример ответа:

[
  {
    "user": "string",
    "following": "string"
  }
]

Подписка пользователя от имени которого сделан запрос на пользователя переданного в теле запроса. Анонимные запросы запрещены (метод POST):

http://localhost/api/v1/follow/

Создание, обновление и верификация токена происходит на следущих эндпоинтах:

http://localhost/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"
      }
    ]
  }
]

Получение конкретного комментария, а так же его редактирование и удаление (доступно только для автора комментария, модератора или администратора) происходит на эндпоинте:

http://localhost/api/v1/titles/{title_id}/reviews/{review_id}/comments/{comment_id}/

Пример ответа:

{
  "id": 0,
  "text": "string",
  "author": "string",
  "pub_date": "2019-08-24T14:15:22Z"
}

Регистрация пользователя и получение jwt токена происходит на следующих эндпоинтах:

http://localhost/api/v1/auth/signup/
http://localhost/api/v1/auth/token/

Лицензия

MIT

Free Software, Hell Yeah!