Как Django Ninja превращает разработку API в удовольствие
Знаете это чувство, когда берешься за Django REST Framework (DRF) и понимаете, что сейчас придется написать гору сериализаторов, вьюсетов и роутеров? DRF — отличный инструмент, проверенный временем, но иногда он кажется слишком тяжеловесным. Хочется чего-то легкого, как FastAPI, но при этом не терять мощную ORM и админку Django. Именно эту проблему решает Django Ninja.
Что это вообще такое
Django Ninja — это библиотека для создания API, которая объединяет в себе лучшее от двух миров. От Django она берет стабильность и работу с базой данных, а от современных подходов — типизацию Python и библиотеку Pydantic.
Если вы когда-нибудь пробовали FastAPI, то почувствуете себя как дома. Автор проекта, Виталий Глиняный, явно вдохновлялся идеей «быстро пишем — быстро работает». Проект уже давно вышел из стадии «эксперимента на коленке» и используется в продакшене крупными компаниями.
Почему на это стоит взглянуть
Главная фишка здесь в использовании аннотаций типов. Вам не нужно описывать сложные классы сериализаторов. Вы просто указываете типы аргументов в функции, а Django Ninja сам понимает, что нужно достать из GET-параметров, что из тела запроса, а что — из URL.
Автоматическая документация без боли
Как только вы написали первый эндпоинт, у вас уже готова интерактивная документация. Просто переходите по адресу /api/docs и видите привычный Swagger.

Это экономит кучу времени: не нужно вручную описывать схемы или гадать, какие поля ожидает фронтенд. Все синхронизируется автоматически.
Скорость работы
За счет использования Pydantic для валидации данных, Django Ninja показывает отличные результаты в бенчмарках. Pydantic написан на Rust (в последних версиях) и работает ощутимо быстрее стандартных сериализаторов DRF.

К тому же, здесь из коробки есть поддержка асинхронности. Если вам нужно делать запросы к внешним API или выполнять долгие операции, просто пишите async def, и Django Ninja сделает все остальное.
Как это выглядит в коде
Давайте посмотрим на простой пример. Допустим, нам нужно создать API для сложения двух чисел. В обычном Django проекте создаем файл api.py:
from ninja import NinjaAPI
api = NinjaAPI()
@api.get("/add")
def add(request, a: int, b: int):
return {"result": a + b}
Затем подключаем это в urls.py:
from django.urls import path
from .api import api
urlpatterns = [
path("api/", api.urls),
]
Все. Никаких классов, никаких мета-описаний. Типы int для a и b гарантируют, что если кто-то пришлет строку, Django Ninja вернет понятную ошибку валидации еще до того, как выполнится тело функции.
Практические моменты
В реальных проектах мы редко складываем числа. Обычно нам нужно работать с моделями Django. Django Ninja позволяет легко интегрировать Pydantic-схемы с ORM. Вы создаете схему, указываете model_config, и библиотека сама подтягивает нужные поля из базы.
Интересно, что проект поддерживает работу с аутентификацией (API Key, JWT, Bearer) очень лаконично. Вам не нужно переопределять глобальные настройки, достаточно добавить декоратор или аргумент в конструктор API.
Кому это пригодится
Я бы посоветовал попробовать Django Ninja в двух случаях. Во-первых, если вы начинаете новый проект на Django и планируете делать упор на API. Вы получите скорость разработки FastAPI, сохранив при этом все плюшки экосистемы Django.
Во-вторых, если ваш текущий проект на DRF стал слишком неповоротливым. Django Ninja можно внедрять постепенно, он прекрасно уживается рядом с DRF в одном проекте. Можно переписать пару самых нагруженных или сложных эндпоинтов и посмотреть на результат.
Конечно, у DRF все еще больше готовых сторонних пакетов для специфических задач. Но если ваша цель — быстрое, типизированное и производительное API, то «ниндзя» сейчас выглядит как один из лучших вариантов в экосистеме Python.
С чего начать? Просто установите пакет через pip:
pip install django-ninja
И попробуйте переписать любой простой GET-запрос. Скорее всего, возвращаться к старым методам уже не захочется.
