Главная  /  Статьи  /  Python

Vibe Codex для Python: Django, FastAPI, ML-скрипты

Python — это три языка в одном: веб, наука и автоматизация. Хороший ассистент знает, на каком сейчас говорят.

Python-разработка в 2026 году делится на три почти не пересекающихся мира: монолит на Django, микросервис на FastAPI и блокнот с pandas. Vibe Codex одинаково удобен во всех трёх, потому что читает pyproject.toml и понимает, во что вы вляпались.

Django: вьюхи, миграции, формы

Класс-вьюхи и миграции — это та область, где Vibe Codex окупается за день. Возьмём задачу: добавить эндпоинт «вернуть отчёт за период». Один промпт — три файла.

$ vibe-codex "добавь APIView /reports/sales для DRF, \
              параметры date_from, date_to, формат CSV, \
              кэш на 5 минут, тест в reports/tests/test_views.py"
[plan] 3 files:
  + reports/views.py        (SalesReportView)
  + reports/urls.py         (path('sales/', ...))
  + reports/tests/test_views.py
# reports/views.py
from datetime import date
from django.core.cache import cache
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status

from .reports import build_sales_csv


class SalesReportView(APIView):
    def get(self, request):
        try:
            date_from = date.fromisoformat(request.query_params['date_from'])
            date_to   = date.fromisoformat(request.query_params['date_to'])
        except (KeyError, ValueError):
            return Response(
                {'error': 'date_from and date_to required (YYYY-MM-DD)'},
                status=status.HTTP_400_BAD_REQUEST,
            )

        cache_key = f'sales:{date_from}:{date_to}'
        csv = cache.get(cache_key)
        if csv is None:
            csv = build_sales_csv(date_from, date_to)
            cache.set(cache_key, csv, 300)

        return Response(csv, content_type='text/csv')

Миграции — отдельная любовь. vibe-codex migrate анализирует diff моделей и пишет RunPython-шаги для данных, а не «autogenerate без понимания».

FastAPI: pydantic, dependency injection, async

FastAPI награждает за явные типы. Vibe Codex понимает pydantic v2 и не путает Field с typing.Annotated.

$ vibe-codex "endpoint POST /invoices/refund, валидация \
              суммы и идемпотентности через Idempotency-Key, \
              dependency: get_current_user"
[plan] 1 file: app/api/invoices/refund.py
[generated]
from fastapi import APIRouter, Depends, Header, HTTPException
from pydantic import BaseModel, Field, condecimal
from decimal import Decimal

from app.deps import get_current_user, get_idempotency_store

router = APIRouter()

class RefundRequest(BaseModel):
    invoice_id: str = Field(min_length=1)
    amount: condecimal(gt=Decimal(0), max_digits=12, decimal_places=2)
    reason: str = Field(max_length=500)

@router.post('/invoices/refund')
async def refund(
    body: RefundRequest,
    idem_key: str = Header(..., alias='Idempotency-Key'),
    user = Depends(get_current_user),
    store = Depends(get_idempotency_store),
):
    cached = await store.get(idem_key)
    if cached:
        return cached

    result = await process_refund(body, user)
    await store.set(idem_key, result, ttl_seconds=86400)
    return result

ML и pandas: блокнот превращается в скрипт

Грязный ноутбук с пятью разделами «final_v2_real_final» рефакторится в один прогон. Vibe Codex выделит чистый main(), оставит сайд-эффекты на CLI и добавит argparse.

$ vibe-codex notebook-to-script analysis.ipynb \
            --output scripts/build_features.py
«Python устроен так, что вчерашний эксперимент завтра становится продом. Хорошо, когда в этот момент он уже причёсан».

pytest без боли

Параметризованные тесты, фикстуры и моки — то, что пишется одинаково в каждом проекте, и поэтому стоит отдать ассистенту.

$ vibe-codex "сгенерируй параметризованные тесты для функции \
              parse_phone(), варианты RU/KZ/BY номеров"
[plan] 1 file: tests/test_phone.py
[case] 18 cases including: +7, 8, KZ +7 7XX, BY +375, garbage

Скучные, но критические детали

Когда reasoning стоит включить

Для типичного «добавь endpoint» хватает быстрой модели. Когда задача — спроектировать выгрузку данных, выбрать стратегию шардирования или разобрать чужой Celery-граф, переключаемся на Claude Opus 4.7 или GPT 5.2 Codex:

$ vibe-codex --model claude-opus-4.7 \
  "Celery: 12 очередей, две падают раз в неделю — \
   найди узкое место по приложенным конфигам"

Python — это про скорость идеи. Vibe Codex не превращает её в «AI-сгенерированный кашевар», а просто срезает скучные углы — те, на которых тратится 80% времени и 0% внимания.

Готов попробовать?

brew tap xrouter-chat/tap && brew install vibe-codex — и за 30 секунд ты в деле.

Поставить Vibe Codex →