Вступление
Сентябрь 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 — там мы разбираем реальные проекты шаг за шагом.
Комментарии