FastAPI и Django в 2026: 12 промтов, которые превращают код в продакшн-решение

Вступление

Сентябрь 2026. Python-бэкенд-разработка перестала быть просто написанием эндпоинтов. Сегодня вы конкурируете не с коллегами, а с командами, которые используют LLM для генерации схем, миграций и даже оптимизации SQL. Но есть проблема: большинство промтов в сети — это либо банальные «напиши CRUD», либо абстрактные «сделай хорошо». Они не решают реальных задач: как спроектировать идемпотентный API, как переписать N+1 в Django ORM, как мигрировать FastAPI-приложение с Pydantic v1 на v2 без боли.

Я собрал 12 сценариев, которые сам использую в работе над высоконагруженными сервисами. Каждый промт — это не просто запрос к AI, а часть инженерного пайплайна: от проектирования контрактов до деплоя в Kubernetes. Вы получите готовые формулировки, примеры кода и объяснение, почему именно так. Статья будет полезна и тем, кто только начинает с FastAPI/Django, и тем, кто хочет систематизировать использование AI в разработке.


1. Проектирование REST API с OpenAPI-контрактом (FastAPI)

Задача: Сгенерировать спецификацию OpenAPI 3.1 для нового микросервиса, включая аутентификацию, пагинацию и обработку ошибок.
Промт:

Ты — senior Python-разработчик, эксперт по FastAPI. Спроектируй REST API для сервиса управления задачами (task tracker). Требования:
- Аутентификация: JWT (Bearer).
- Ресурсы: /tasks, /tasks/{id}, /users.
- Поддержи CRUD, фильтрацию по статусу и приоритету, пагинацию (limit/offset).
- Опиши схемы Pydantic v2 для запросов и ответов.
- Сгенерируй OpenAPI 3.1 спецификацию в формате YAML.
- Добавь примеры ошибок 400, 401, 404, 422 с использованием Problem Details (RFC 7807).

Пример результата (фрагмент):

openapi: 3.1.0
info:
  title: Task Tracker API
  version: 1.0.0
paths:
  /tasks:
    get:
      parameters:
        - name: status
          in: query
          schema:
            type: string
            enum: [todo, in_progress, done]
        - name: limit
          in: query
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: Список задач
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Task'

Пояснение: Промт заставляет AI сразу выдать контракт, который можно использовать для генерации клиентов и валидации. Ссылка на RFC 7807 (Problem Details for HTTP APIs) гарантирует единообразие ошибок.


2. Генерация Django-моделей с учётом денормализации

Задача: Создать модели для интернет-магазина с оптимизацией под частые запросы.
Промт:

Ты — эксперт по Django ORM. Сгенерируй модели для магазина: Product, Category, Order, OrderItem. Учти:
- Product имеет поля: name, price, stock, category (FK), created_at.
- Для быстрого вывода списка товаров с категориями добавь денормализованное поле category_name в Product (обновляется через signals).
- Order содержит статус (choices), user (FK на User), total_price (вычисляется при сохранении).
- Используй индексы для полей, по которым часто идёт фильтрация: status, created_at.
- Напиши миграции.

Пример кода:

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.PositiveIntegerField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    category_name = models.CharField(max_length=255, editable=False)
    created_at = models.DateTimeField(auto_now_add=True)

    def save(self, *args, **kwargs):
        self.category_name = self.category.name
        super().save(*args, **kwargs)

Пояснение: Денормализация ускоряет чтение, но требует поддержки целостности. AI сгенерирует и сигналы, и индексы — вы сэкономите часы.


3. Рефакторинг N+1 запросов в Django

Задача: Найти и исправить N+1 в существующем коде.
Промт:

Проанализируй этот Django-код и найди все N+1 запросы. Предложи исправления с использованием select_related и prefetch_related. Объясни, почему каждый запрос является проблемой.

Код:
for order in Order.objects.all():
    print(order.user.username)
    for item in order.items.all():
        print(item.product.name)

Результат: AI укажет, что order.user и order.items.all() вызывают отдельные запросы. Решение:

orders = Order.objects.select_related('user').prefetch_related('items__product')
for order in orders:
    print(order.user.username)
    for item in order.items.all():
        print(item.product.name)

Пояснение: Промт заставляет AI не просто дать код, но и объяснить причину. Это обучает и предотвращает повторение ошибок.


4. Валидация данных в FastAPI с Pydantic v2

Задача: Написать сложные валидаторы для полей.
Промт:

Создай Pydantic v2 модель UserCreate с полями: email (EmailStr), password (min_length=8, должен содержать цифру и заглавную букву), age (ge=18, le=120). Добавь кастомный валидатор для password. Приведи пример использования в эндпоинте FastAPI.

Пример:

from pydantic import BaseModel, EmailStr, field_validator

class UserCreate(BaseModel):
    email: EmailStr
    password: str
    age: int

    @field_validator('password')
    def password_complexity(cls, v):
        if not any(c.isdigit() for c in v) or not any(c.isupper() for c in v):
            raise ValueError('Пароль должен содержать цифру и заглавную букву')
        return v

Пояснение: Pydantic v2 использует field_validator вместо validator. AI сгенерирует актуальный синтаксис, если явно указать версию.


5. Написание тестов для API (pytest + httpx)

Задача: Сгенерировать тесты для FastAPI-приложения.
Промт:

Напиши pytest-тесты для FastAPI-приложения с использованием httpx.AsyncClient. Покрой:
- Успешное создание задачи (POST /tasks).
- Ошибку валидации (422).
- Получение списка задач с пагинацией.
- Проверку аутентификации (401 без токена).
Используй фикстуры для тестовой БД (SQLite in-memory).

Пример теста:

import pytest
from httpx import AsyncClient

@pytest.mark.asyncio
async def test_create_task(client: AsyncClient):
    response = await client.post('/tasks', json={'title': 'Test'})
    assert response.status_code == 201
    assert response.json()['title'] == 'Test'

Пояснение: AI сгенерирует и фикстуры, и тесты. Вы получите каркас, который останется только дополнить.


6. Оптимизация SQL-запросов через EXPLAIN ANALYZE

Задача: Ускорить медленный запрос в PostgreSQL.
Промт:

У меня есть медленный запрос в Django: Order.objects.filter(status='new').select_related('user').order_by('-created_at')[:100]. Вот вывод EXPLAIN ANALYZE:

Limit  (cost=1000.00..2000.00 rows=100 width=100) (actual time=500.0..600.0 rows=100 loops=1)
  ->  Sort  (cost=...)
        Sort Key: created_at DESC
        ->  Seq Scan on orders  (cost=...)

Предложи оптимизацию: индексы, изменение запроса, кэширование. Объясни每一步.

Результат: AI предложит составной индекс (status, created_at DESC) и, возможно, переписать на order_by('-created_at').filter(status='new') для использования индекса.
Пояснение: Всегда прикладывайте план выполнения — это ключ к точным рекомендациям.


7. Миграция с FastAPI на Django (или наоборот)

Задача: Перенести эндпоинты без потери функциональности.
Промт:

У меня есть FastAPI-приложение с эндпоинтами /items (GET, POST), /items/{id} (GET, PUT, DELETE). Напиши эквивалент на Django REST Framework (ViewSets + routers). Сохрани ту же логику валидации (используй сериализаторы).

Пример:

from rest_framework import viewsets
from .models import Item
from .serializers import ItemSerializer

class ItemViewSet(viewsets.ModelViewSet):
    queryset = Item.objects.all()
    serializer_class = ItemSerializer

Пояснение: AI сгенерирует и роутер, и сериализаторы. Это ускоряет миграцию в разы.


8. Асинхронные задачи с Celery и Redis

Задача: Настроить фоновую обработку в Django.
Промт:

Настрой Celery для Django-проекта с брокером Redis. Создай задачу send_email_task, которая отправляет письмо. Покажи, как вызвать её из view и как мониторить через Flower. Добавь конфигурацию для периодических задач (celery beat).

Пример:

# tasks.py
from celery import shared_task

@shared_task
def send_email_task(email):
    # логика отправки
    return f'Email sent to {email}'

Пояснение: AI напомнит про CELERY_BROKER_URL и CELERY_RESULT_BACKEND.


9. Деплой FastAPI в Docker + Kubernetes

Задача: Создать Dockerfile и манифесты для K8s.
Промт:

Сгенерируй Dockerfile для FastAPI-приложения на Python 3.12 (multi-stage). Используй uvicorn. Добавь манифесты Kubernetes: Deployment (3 реплики), Service (LoadBalancer), ConfigMap для переменных окружения. Учти healthcheck /health.

Пример Dockerfile:

FROM python:3.12-slim as builder
COPY requirements.txt .
RUN pip install --user -r requirements.txt

FROM python:3.12-slim
COPY --from=builder /root/.local /root/.local
COPY . /app
WORKDIR /app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]

Пояснение: Multi-stage уменьшает размер образа. AI сгенерирует и probes для K8s.


10. Логирование и мониторинг (Prometheus + Grafana)

Задача: Внедрить метрики в FastAPI.
Промт:

Добавь в FastAPI-приложение экспорт метрик Prometheus (количество запросов, время ответа). Используй prometheus-fastapi-instrumentator. Покажи, как настроить Grafana dashboard для визуализации.

Пример:

from prometheus_fastapi_instrumentator import Instrumentator

app = FastAPI()
Instrumentator().instrument(app).expose(app)

Пояснение: AI подскажет, какие метрики важны для SLO.


11. Безопасность: защита от SQL-инъекций и XSS

Задача: Провести аудит кода.
Промт:

Проанализируй этот Django-код на уязвимости: 

```python
def search(request):
    query = request.GET.get('q')
    results = MyModel.objects.raw(f"SELECT * FROM myapp_mymodel WHERE name LIKE '%{query}%'")
    return render(request, 'results.html', {'results': results})

Укажи проблемы и предложи исправления с использованием ORM и экранирования.

**Результат:** AI укажет на SQL-инъекцию и XSS (если шаблон не экранирует). Решение:  
```python
from django.db.models import Q
results = MyModel.objects.filter(name__icontains=query)

Пояснение: Промт учит безопасным паттернам.


12. Генерация документации к API (Swagger + Redoc)

Задача: Автоматически создать документацию.
Промт:

Настрой FastAPI для генерации документации Swagger UI и Redoc. Добавь описания к эндпоинтам на русском языке, примеры запросов и ответов. Используй теги для группировки.

Пример:

@app.get('/items/', tags=['Items'], summary='Получить список items')
async def read_items():
    ...

Пояснение: AI сгенерирует docstrings и настройки openapi_tags.


Заключение

Эти 12 промтов — не догма, а отправная точка. Главное — адаптировать их под свой контекст: указывайте версии библиотек, прикладывайте фрагменты кода и планы выполнения. Чем конкретнее запрос, тем полезнее ответ. Используйте AI как парного программиста, который никогда не устаёт. А если хотите глубже погрузиться в Python-бэкенд с AI-ассистентом, изучите наши текстовые курсы на asibiont.com — там мы разбираем реальные проекты шаг за шагом.

← Все статьи

Комментарии

Читайте также

Оживление старого оборудования: как подключить COM / RS-232 к AI-агенту ASI Biont и управлять станками через чат

13 июля 2026

Thursday Thoughts: Claude Code — это Lotus 1-2-3, а Copilot играет в Excel

6 августа 2026

От нуля до первого трека: Как курс «Музыка и аудиопроизводство» на Asibiont.com изменил мое звучание

2 июля 2026

Вы создали приложение через Vibe Coding? Вот как протестировать его с реальными QA-экспертами перед запуском

18 июля 2026

Как я научил нейросеть рисовать в Excalidraw: агентный цикл за 100 строк кода

8 июля 2026

Закон об информационной безопасности: Практическое руководство по соблюдению законодательства в эпоху утечек данных

24 июня 2026

SEO-аудит и контент-стратегия: 10 промтов, которые заменят половину рутины

1 сентября 2026

SQL под микроскопом: 12 промтов, которые превращают медленные запросы в молниеносные и делают миграции PostgreSQL незаметными

8 октября 2026

От «не беспокойтесь» до миллиарда: как Бен Аффлек за два года превратил ИИ из угрозы в актив и продал стартап Netflix за $587 млн

21 июля 2026