Или как сделать 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
приносит что-то красивое в твою архитектуру! 🌸