django rest apidjango rest api

Или как сделать REST API на Python Django и не потерять настрой в потоке сериализаторов и viewset’ов.


Вступление: Django + Весна = REST API

Весна — это не только время обновлений в природе, но и отличный повод наконец-то навести порядок в коде. Птички поют, солнышко светит, а ты вдруг понимаешь, что твой старый проект на Django мог бы быть куда красивее и понятнее, если бы там был нормальный API.

Если ты новичок в фронтенде, но душа просит React’а, или ты хочешь сделать Telegram-бота, или просто создать сервис, который будет работать без лишней привязки к шаблонам — тебе точно нужен django rest api. А точнее — django rest api framework, который поможет тебе навести весеннюю чистоту в архитектуре и сделать красивый, масштабируемый проект.

Так что наливаем чай с бергамотом, открываем редактор кода — и вперёд, к весне и структуре!


Что такое REST API? Объясняем на пальцах (и на пирожках)

Представь себе: ты хочешь пирожок. Но ты не звонишь бабушке напрямую. Ты заходишь в приложение, выбираешь «вишнёвый» и жмёшь «доставить». Вот это и есть REST API — посредник между твоим запросом и тем, кто готов его обработать.

А если серьёзно, REST API (Representational State Transfer) — это архитектурный стиль, при котором клиент и сервер обмениваются данными по HTTP, не храня состояние друг друга. У REST есть свои «волшебные» методы:

  • GET — получи мне, пожалуйста, данные
  • POST — вот тебе новые данные, сохрани
  • PUT — обнови, пожалуйста, данные целиком
  • PATCH — подправь что-нибудь, не ломая всё
  • DELETE — удалим, как старые черновики в Google Docs

Простыми словами — ты делаешь запрос, сервер возвращает JSON, и все счастливы.


Django REST API Framework: готовим инструменты

Ну а теперь ближе к делу. Django сам по себе не знает, что такое API. Он про шаблоны, HTML, и немного про админку. Но есть решение — Django REST framework, или просто DRF. Это библиотека, которая добавляет Django суперсилы для создания API.

Установка:

pip install djangorestframework

И, конечно же, не забудь добавить 'rest_framework' в INSTALLED_APPS:

INSTALLED_APPS = [
    ...,
    'rest_framework',
]

Теперь Django знает, как работать с сериализаторами, ViewSet’ами и маршрутизаторами. Всё, как доктор прописал.


Создаём REST API на Python Django шаг за шагом 🌱

Допустим, мы делаем весенний сервис — например, список цветов, которые нужно посадить в саду.

Шаг 1: Модель

# models.py
from django.db import models

class Flower(models.Model):
    name = models.CharField(max_length=100)
    color = models.CharField(max_length=50)
    is_perennial = models.BooleanField(default=False)

    def __str__(self):
        return self.name

Шаг 2: Сериализатор

# serializers.py
from rest_framework import serializers
from .models import Flower

class FlowerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Flower
        fields = '__all__'

Шаг 3: ViewSet

# views.py
from rest_framework import viewsets
from .models import Flower
from .serializers import FlowerSerializer

class FlowerViewSet(viewsets.ModelViewSet):
    queryset = Flower.objects.all()
    serializer_class = FlowerSerializer

Шаг 4: Роутинг

# urls.py
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from .views import FlowerViewSet

router = DefaultRouter()
router.register(r'flowers', FlowerViewSet)

urlpatterns = [
    path('api/', include(router.urls)),
]

Готово! Теперь у тебя есть полноценный rest api python django, с которым можно взаимодействовать через Postman, Curl или фронтенд на Vue/React/Svelte — кому как по душе.


Полезные плюшки DRF: фильтрация, пагинация, поиск 🌼

DRF не только про CRUD. Он умеет куда больше:

Фильтрация:

from rest_framework import filters

class FlowerViewSet(viewsets.ModelViewSet):
    queryset = Flower.objects.all()
    serializer_class = FlowerSerializer
    filter_backends = [filters.SearchFilter]
    search_fields = ['name', 'color']

Теперь по запросу /api/flowers/?search=розовый можно искать розовые цветы.

Пагинация:

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

И вуаля — API возвращает 10 объектов за раз. Остальное — по страницам.


Swagger и ReDoc: давайте красиво 🌷

DRF позволяет документировать API автоматически. Просто установи drf-yasg:

pip install drf-yasg

И добавь в urls.py:

from rest_framework import permissions
from drf_yasg.views import get_schema_view
from drf_yasg import openapi

schema_view = get_schema_view(
   openapi.Info(
      title="Spring Flowers API",
      default_version='v1',
   ),
   public=True,
   permission_classes=(permissions.AllowAny,),
)

urlpatterns += [
    path('swagger/', schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
    path('redoc/', schema_view.with_ui('redoc', cache_timeout=0), name='schema-redoc'),
]

Теперь ты можешь наслаждаться красивой документацией, как бабочка наслаждается цветком.


Частые ошибки и как не закапывать свои ростки 🐞

  • ❌ Не указал serializer_class → API не понимает, что сериализовать
  • ❌ Задублировал маршруты → конфликт адресов
  • GET вместо POST при отправке формы → пустой ответ
  • PATCH без данных → ничего не обновилось

Будь внимателен и береги свой проект. Spring is fragile 🌿


Интеграция Django REST API с фронтендом 🌍

Самое приятное в django rest api framework — он универсален. Ты можешь подружить его с чем угодно:

  • React: axios, fetch и компоненты
  • Vue: vue-resource или axios
  • Flutter, мобильные приложения
  • Telegram-боты и даже Excel с макросами (ну, если очень хочется)

Пример:

fetch('http://localhost:8000/api/flowers/')
  .then(res => res.json())
  .then(data => console.log(data))

API становится мостом между бэкендом и любым пользовательским интерфейсом. Главное — держать его чистым и предсказуемым.


Глоссарий 🌼 (на случай, если кто-то потерялся):

  • API — способ общения между программами
  • REST — архитектурный стиль, где всё — ресурсы и запросы
  • Endpoint — адрес API, куда стучится клиент
  • CRUD — Create, Read, Update, Delete (основные действия с данными)
  • Сериализация — превращение модели в JSON и обратно
  • ViewSet — обработчик запросов в DRF
  • Router — волшебник, который связывает URL и ViewSet

Заключение 🌷

Вот и всё. Мы прошли путь от «что вообще такое REST?» до полноценного API с фильтрацией, документацией и фронтендом. И всё это — на фоне весеннего настроения и с нулём головной боли.

Работа с django rest api framework даёт ощущение порядка и контроля. Ты знаешь, что и где лежит. Ты уверен, что твой код читаем и готов к росту. А проект — к интеграции с чем угодно.

Пусть твой бэкенд будет лёгким, как ветер, и понятным, как запах сирени. Удачи, и пусть каждый новый POST приносит что-то красивое в твою архитектуру! 🌸

Поделится