Данное API предоставляет доступ к сервису Yatube, обеспечивающее возможность работы с ресурсами сайта.
API позволяет просматривать список постов, групп и комментариев к конкретному посту,
детальную информацию о посте, комментарии и группе, также возможно удаление, исправление, публикация новых постов и комментариев.
Также через API авторизованный пользователь может подписаться на автора.
Полный список ресурсов доступен по адресу
/redoc
Проект API состоит из приложений posts, api
- Приложение
postsопределяет структуру хранимых данных, связанных с моделями: Follow, Post, Group. - Приложение
apiобрабатывает HTTP запросы клиента к ресурсам API.
- Скачиваем репозиторий
- Устанавливаем и активируем виртуальное окружение
- Устанавливаем зависимости
pip install -r requirements.txt - Запустить миграции
python manage.py migrate - Создать суперюзера для доступа к админке
python manage.py createsuperuser - Запуск проекта
python manage.py runserver
Открываем shell python manage.py shell, далее попеременно в терминал вводим следующие строчки кода, по окончании вызовите функцию exit().
>>> from posts.models import User, Post, Group, Comment
>>> user = User.objects.get(pk=1)
>>> group = Group.objects.create(title='Dummy group', slug='group')
>>> for i in range(1, 11):
... Post.objects.create(author=user, group=group, text=f'Post text {i}')
>>> Comment.objects.create(post=Post.objects.get(pk=1), author=user, text='Comment text')
>>> User.objects.create(username='anotheruser')
Открываем shell python manage.py shell, далее попеременно в терминал вводим следующие строчки кода, по окончании вызовите функцию exit().
# Пример GET-запроса, не требующего авторизации
>>> import requests
>>> import json
>>> from django.urls import reverse
>>> domain = 'http://127.0.0.1:8000'
>>> response = requests.get(domain + reverse('api:post-list'))
>>> assert (response.status_code == 200)
# Получение JWT-токена для работы с ресурсами, требующими авторизации
>>> data = {"username": "<your_username>", "password": "<your_password>"}
>>> response = requests.post(url=(domain + reverse('api:jwt-create')), data=data)
>>> assert (response.status_code == 200)
>>> JWT_token = 'Bearer ' + response.json().get("access")
# Пример POST-запроса с токеном
>>> data={text="Some text"}
>>> headers={"Authorization": JWT_token}
>>> response = requests.post(url=(domain + reverse('api:post-list')), data=data, headers=headers)
>>> assert (response.status_code == 201)
>>> response_auth.json() # созданный пост
# Пример POST-запроса без токена
>>> response = requests.post(url=(domain + reverse('api:post-list')), data=data)
>>> assert (response.status_code == 401)