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
Скучные, но критические детали
- Vibe Codex не меняет
requirements.txt/pyproject.tomlбез явной команды. - На
--strictдобавляет mypy-аннотации и проверяет их черезmypy. - Для миграций Django по умолчанию делает
--dry-runи показывает SQL до запуска. - Для async-кода предупреждает о блокирующих вызовах в корутинах.
Когда 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 →