Django Revolution — это не просто инструмент, это философия. Философия, где рутина уступает место творчеству, а баги растворяются в чистоте кода. Это путь к просветлению в разработке API. Примите его, и ваш код будет сиять, а дух разработчика — парить.
Наш мир, сотканный из битов и фантомных сущностей, породил нового Джинна, способного исполнять самые заветные желания Разработчика. Встречайте: Django Revolution – не просто библиотека, а откровение, мантра, ключ к вратам истинного дзен в мире Django API.
?♂️ Просветление через Код: Суть Django Revolution
Помните эти дни, когда каждый новый эндпоинт требовал плясок с бубном вокруг OpenAPI-спецификаций, ручного обновления клиентов и бесконечных сражений с TypeError
? Так вот, это был прошлый век. Эпоха, когда программист был лишь придатком к механической рутине. Django Revolution — это квантовый скачок, избавляющий вас от кармического бремени.
Эта библиотека не генерирует код, она manifests его. Словно из чистого намерения, из глубин вашего Django-проекта возникают совершенные, типизированные клиенты на TypeScript и Python, готовые к бою. И все это — с одного, единственного, сакрального приказа: python
manage.py
revolution
.
"И тогда, о адепт, узреешь ты:
public.getProfile()
не просто функция. Это эхо безмолвного согласия между твоим фронтендом и бэкендом, воплощение истинной гармонии."
? Зоны Сознания: Архитектура API
API, подобно нашему сознанию, состоит из множества слоев, или зон. Есть public
для мира смертных, admin
для богов-управляющих, mobile
для кочевников с тачскринами. Django Revolution не просто признает это, он делает это основой.
from django_revolution.app_config import ZoneConfig, get_revolution_config
# Наши зоны, наши миры, рожденные из чистого Python'а
zones = {
'public': ZoneConfig(
apps=['accounts', 'billing', 'payments', 'support', 'public'],
title='Публичный API',
description='API для внешних сущностей',
public=True,
auth_required=False, # Никаких цепей для свободных душ
version='v1',
path_prefix='public'
),
'internal': ZoneConfig(
apps=['system', 'mailer'],
title='Внутренний API',
description='API для сущностей, что обитают в глубинах сервера',
public=False,
auth_required=True, # Только для посвященных
version='v1',
path_prefix='internal'
),
'admin': ZoneConfig(
apps=['admin_panel', 'services'],
title='API Администраторов',
description='Врата в мир управления',
public=False,
auth_required=True, # Для тех, кто держит нити мироздания
version='v1',
path_prefix='admin'
)
}
# Одно касание, и структура проявлена
config = get_revolution_config(project_root=Path.cwd(), zones=zones)
Каждая зона — это отдельная сущность, со своими правилами, своим входом, своими тайнами. И Django Revolution понимает это, создавая для каждой зоны свой, неповторимый клиент, чистый, как слеза младенца.
?️ Инструменты Просветления: Конфигурация и Генерация
Забудьте о XML-файлах, JSON-схемах и прочих артефактах уходящей эры. Django Revolution предлагает Pydantic-конфигурации, где каждый параметр, каждая настройка — это не просто строка, а типизированная сущность, часть вашего кодового мироздания.
# api/settings/config/services.py
from django_revolution.drf_config import create_drf_config
# Конфигурация DRF, возникающая из небытия
drf_config = create_drf_config(
title="Мой API",
description="Мой божественный API",
version="1.0.0",
schema_path_prefix="/api/",
enable_browsable_api=False, # Скрываем от непосвященных
enable_throttling=True, # Ограничиваем жадность
)
# И вот они, настройки Django, готовые к воплощению
settings = drf_config.get_django_settings()
REST_FRAMEWORK = settings['REST_FRAMEWORK']
SPECTACULAR_SETTINGS = settings['SPECTACULAR_SETTINGS']
И когда все готово, когда намерения чисты, настает момент истины.
# Магия начинается
python manage.py revolution
# Или для избранных зон, как для избранных путей
python manage.py revolution --zones public admin
# Только TypeScript, только чистота фронтенда
python manage.py revolution --typescript
И в этот миг, из информационного небытия, возникают они — клиенты. Чистые, как горный ручей, готовые служить.
? Танец Клиентов: TypeScript и Python
TypeScript Клиент:
Воплощение изящества, этот клиент автоматически управляет токенами, заголовками и прочими мирскими делами. Вам остается лишь творить.
import API from '@myorg/api-client';
const api = new API('https://api.example.com');
// Вдохните жизнь в API, передав токен
api.setToken('ваш-токен-доступа', 'ваш-токен-обновления');
// И вот оно, получение данных, легкое как дуновение ветра
const user = await api.public.getCurrentUser();
const products = await api.public.listProducts();
// Проверьте, не покинул ли пользователь этот мир
if (api.isAuthenticated()) {
// Пользователь в нашем мире
}
Python Клиент:
Для тех, кто предпочитает оставаться в объятиях Питона, Django Revolution генерирует также и Python-клиентов.
"Ибо во вселенной кода, как и в мире, все должно быть в равновесии: если есть фронтенд, должен быть и бэкенд, и мост между ними, нерушимый и совершенный."
? Пути Мироздания: Автоматическая Генерация URL'ов
Django Revolution не просто генерирует клиентов, он создает инфраструктуру. Все необходимые URL'ы для Swagger UI и OpenAPI спецификаций возникают сами собой, словно по волшебству.
# urls.py
from django_revolution import add_revolution_urls
urlpatterns = [
path('admin/', admin.site.urls),
]
# И вот, они, новые пути, ведущие к истине
urlpatterns = add_revolution_urls(urlpatterns)
Теперь каждый, кто ищет знания о вашем API, найдет их по чистому, ясному пути: /api/{zone}/schema/
.
? Единство в Многообразии: Монорепо-Дружественность
В мире, где проекты стремятся к разрозненности, Django Revolution предлагает единство. Он сам, без вашего участия, конфигурирует ваш монорепозиторий, связывая воедино TypeScript и Python пакеты.
# pnpm-workspace.yaml (автоматически создается, как отпечаток мысли)
packages:
- 'packages/**'
- 'packages/api/**' # Вот он, след Django Revolution
⚖️ Мудрость Выбора: Когда Использовать Django Revolution?
✅ Идеально, когда:
Ваш Django-проект разросся до размеров космического корабля с множеством экипажей.
Вы строите монорепо, где фронтенд и бэкенд — две стороны одной медали.
Ваша команда жаждет консистентности и типизации в API-клиентах.
Вы готовы отпустить рутину и довериться автоматизации.
❌ Избегайте, когда:
Ваш API — это скромная лавочка с одним товаром.
Вы работаете не с Django (ищите другие пути, например, Fern.dev).
Вы — фанат ручного труда и не готовы к легкости бытия.
MAXH0
Мне кажется это писала нейросеть... Но промпт был очень креативный.
Kahelman
Не кажется-точно, она любит впихнуть уникод символы в начало заголовка. Заколебался повторять ей чтобы этого не делала :)
markolofsen Автор
а что по теме статьи?)
markolofsen Автор
ясно, великие минусователи))