Данный проект представляет собой RESTful API для социальной сети блогеров Yatube. API позволяет пользователям публиковать посты, оставлять комментарии, подписываться на других авторов и организовывать посты по группам.
Проект решает задачу предоставления программного интерфейса для взаимодействия с данными социальной сети, что позволяет интегрировать Yatube с другими приложениями, создавать мобильные клиенты или использовать API для автоматизации различных задач.
Основные возможности API:
- Аутентификация пользователей с использованием JWT-токенов.
- CRUD-операции для постов (публикаций).
- CRUD-операции для комментариев к постам.
- Получение списка групп и информации о конкретной группе.
- Управление подписками на авторов.
- Пагинация для списков постов.
- Поиск по подпискам.
- Python 3.x
- Django 3.x / 4.x
- Django REST framework
- Simple JWT (для аутентификации)
- SQLite (база данных по умолчанию для разработки)
Перед началом убедитесь что в окружении установлен PythonPath до Django проекта:
export PYTHONPATH=$HOME/path/to/project/api_final_yatube/yatube_api
Затем проводите тестирование
pytest -v
Чтобы развернуть проект на локальной машине, следуйте этим шагам:
-
Клонируйте репозиторий:
git clone <URL_вашего_репозитория> cd <название_папки_проекта> # например, yatube_api_final
-
Создайте и активируйте виртуальное окружение:
python -m venv venv
- Для Linux/macOS:
source venv/bin/activate - Для Windows:
venv\Scripts\activate
- Для Linux/macOS:
-
Установите зависимости: Убедитесь, что у вас есть файл
requirements.txtв корне проекта. Если его нет, вы можете создать его командойpip freeze > requirements.txtпосле установки всех необходимых пакетов.pip install -r requirements.txt
Основные зависимости, которые должны быть в
requirements.txt:django djangorestframework djangorestframework-simplejwt django-filter # Если используется для фильтрации # Pillow (для ImageField, если еще не установлен) # gunicorn (для развертывания на production, опционально для локальной разработки) -
Примените миграции: Находясь в директории проекта, где лежит
manage.py:python manage.py migrate
-
Создайте суперпользователя (опционально, для доступа к админке):
python manage.py createsuperuser
-
(Опционально) Загрузите тестовые данные или создайте пользователей/группы: Для корректной работы некоторых тестов (например, Postman-коллекции) или для ручного тестирования API может потребоваться создать пользователей (
regular_user,root,second_user) и группы. Это можно сделать через админку (/admin/) или с помощьюmanage.py shell.Пример создания пользователя в
manage.py shell:from django.contrib.auth import get_user_model User = get_user_model() if not User.objects.filter(username='regular_user').exists(): User.objects.create_user(username='regular_user', password='<ваш_пароль>')
-
Запустите сервер разработки:
python manage.py runserver
По умолчанию API будет доступно по адресу
http://127.0.0.1:8000/api/v1/.
После запуска сервера документация API, сгенерированная с помощью Redoc, будет доступна по адресу:
http://127.0.0.1:8000/api/redoc/
Ниже приведены некоторые примеры запросов к API. Для запросов, требующих аутентификации, необходимо предварительно получить JWT-токен и передавать его в заголовке Authorization: Bearer <your_access_token>.
Запрос: http POST /api/v1/jwt/create/ Content-Type: application/json
{ "username": "your_username", "password": "your_password" }
Ответ (200 OK):
{ "refresh": "eyJ0eX...", "access": "eyJ0eX..." }
Запрос:
GET /api/v1/posts/
Или с пагинацией:
GET /api/v1/posts/?limit=5&offset=10
Ответ (200 OK, пример для запроса без пагинации):
[ { "id": 1, "author": "username1", "text": "Текст первого поста.", "pub_date": "2023-10-27T10:00:00Z", "image": null, "group": 1 }, { "id": 2, "author": "username2", "text": "Текст второго поста.", "pub_date": "2023-10-27T11:00:00Z", "image": "http://127.0.0.1:8000/media/posts/image.jpg", "group": null } ]
Запрос:
POST /api/v1/posts/ Authorization: Bearer <your_access_token> Content-Type: application/json
{ "text": "Мой новый замечательный пост!", "group": 1 // ID существующей группы (опционально) }
Ответ (201 Created):
{ "id": 3, "author": "current_user_username", "text": "Мой новый замечательный пост!", "pub_date": "2023-10-27T12:00:00Z", "image": null, "group": 1 }
Запрос:
GET /api/v1/follow/ Authorization: Bearer <your_access_token>
Поиск по имени пользователя, на которого подписан:
GET /api/v1/follow/?search=author_username Authorization: Bearer <your_access_token>
Ответ (200 OK):
[ { "user": "current_user_username", "following": "author_username1" }, { "user": "current_user_username", "following": "author_username2" } ]
Запрос:
POST /api/v1/follow/ Authorization: Bearer <your_access_token> Content-Type: application/json
{ "following": "username_to_follow" }
Ответ (201 Created):
{ "user": "current_user_username", "following": "username_to_follow" }