Просветление через Код: Суть Django Revolution

от автора

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).

  • Вы — фанат ручного труда и не готовы к легкости бытия.


https://pypi.org/project/django-revolution/


ссылка на оригинал статьи https://habr.com/ru/articles/926938/