实战

Claude Code + FastAPI 实战:用 AI 从零构建生产级 Python API

Claude Code 与 FastAPI 深度协作实战教程:从零构建 RESTful API 的完整流程(项目初始化/路由设计/Pydantic 数据验证/异步数据库操作/JWT 认证/测试覆盖)、CLAUDE.md FastAPI 项目专项配置、让 Claude 自动生成 OpenAPI 文档、用 Claude 排查 Uvicorn 常见报错、Claude Code 辅助编写 pytest 测试的实战技巧,以及部署到 Docker 的完整配置。

2026/3/204分钟 阅读ClaudeEagle

FastAPI 是 Python 后端 API 开发的首选框架,配合 Claude Code, 可以把从设计到测试的全流程效率提升 3-5 倍。

项目初始化:CLAUDE.md 专项配置

markdown
# CLAUDE.md(FastAPI 项目)

## 技术栈
- 框架:FastAPI 0.115+
- 异步 ORM:SQLAlchemy 2.0 async + asyncpg
- 数据验证:Pydantic v2
- 认证:python-jose(JWT)+ passlib(密码哈希)
- 测试:pytest + httpx(AsyncClient)
- 服务器:Uvicorn + Gunicorn

## 项目结构
app/
  main.py           # FastAPI 应用入口
  api/
    v1/
      endpoints/    # 路由处理函数
      deps.py       # 依赖注入(get_db, get_current_user)
  core/
    config.py       # 环境变量配置(使用 pydantic-settings)
    security.py     # JWT 生成/验证
  models/           # SQLAlchemy ORM 模型
  schemas/          # Pydantic 请求/响应 Schema
  services/         # 业务逻辑层(路由层不写业务逻辑)
  tests/

## API 响应规范
所有接口统一响应格式:
{"code": 0, "data": ..., "message": "success"}
错误响应:{"code": 非0, "data": null, "message": "错误描述"}

## 必须遵守
- 路由层只做参数解包和调用 service,不写业务逻辑
- 数据库操作必须使用 async/await
- 敏感字段(密码等)不能出现在任何响应 schema 中

从零开始:让 Claude 设计 API 结构

你:我需要构建一个任务管理 API,功能包括: 用户注册/登录(JWT)、创建/更新/删除任务、 任务状态管理(待办/进行中/完成)、按状态筛选任务 请帮我: 1. 设计 RESTful 路由列表(HTTP 方法 + 路径 + 说明) 2. 设计数据库 Schema(User 表 + Task 表) 3. 输出 Pydantic Schema 定义 Claude: 路由设计: POST /api/v1/auth/register - 用户注册 POST /api/v1/auth/login - 登录(返回 JWT) GET /api/v1/tasks - 获取任务列表(支持 ?status= 筛选) POST /api/v1/tasks - 创建任务 PUT /api/v1/tasks/{id} - 更新任务 DELETE /api/v1/tasks/{id} - 删除任务 PATCH /api/v1/tasks/{id}/status - 更新任务状态 数据模型: [输出完整的 SQLAlchemy 模型和 Pydantic Schema 代码]

核心代码示例

python
# app/main.py
from fastapi import FastAPI
from app.api.v1 import auth, tasks
from app.core.config import settings

app = FastAPI(
    title="Task Manager API",
    version="1.0.0",
    docs_url="/api/docs",  # Swagger UI
)

app.include_router(auth.router, prefix="/api/v1/auth", tags=["认证"])
app.include_router(tasks.router, prefix="/api/v1/tasks", tags=["任务"])

# app/api/v1/deps.py - 依赖注入
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPBearer
from app.core.security import verify_token
from app.database import AsyncSession, get_db

security = HTTPBearer()

async def get_current_user(
    token: str = Depends(security),
    db: AsyncSession = Depends(get_db),
):
    payload = verify_token(token.credentials)
    if not payload:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Token 无效或已过期"
        )
    user = await db.get(User, payload["sub"])
    if not user:
        raise HTTPException(status_code=404, detail="用户不存在")
    return user

# app/api/v1/tasks.py - 任务路由
from fastapi import APIRouter, Depends, Query
from app.schemas.task import TaskCreate, TaskResponse, TaskStatus
from app.services.task_service import TaskService
from app.api.v1.deps import get_current_user, get_db

router = APIRouter()

@router.get("", response_model=list[TaskResponse])
async def list_tasks(
    status: TaskStatus | None = Query(None, description="按状态筛选"),
    current_user = Depends(get_current_user),
    db = Depends(get_db),
):
    return await TaskService(db).list_by_user(current_user.id, status)

@router.post("", response_model=TaskResponse, status_code=201)
async def create_task(
    payload: TaskCreate,
    current_user = Depends(get_current_user),
    db = Depends(get_db),
):
    return await TaskService(db).create(current_user.id, payload)

让 Claude 写 pytest 测试

你:为 POST /api/v1/tasks 接口写完整的 pytest 测试,覆盖: 1. 正常创建任务(201) 2. 未认证请求(401) 3. 标题为空(422 验证错误) 4. 标题超过 200 字符(422 验证错误) Claude:生成完整 httpx.AsyncClient 测试代码 # 运行测试 pytest tests/ -v --asyncio-mode=auto

常见 FastAPI 报错让 Claude 帮排查

你:Uvicorn 启动报错: RuntimeError: Task <Task pending coro=<AsyncEngine.connect()>> destroyed while it is pending! 这是什么原因,如何修复? Claude:这是 SQLAlchemy async engine 没有正确关闭的问题。 在应用关闭时需要 dispose engine: @app.on_event("shutdown") async def shutdown(): await engine.dispose()

Docker 部署配置

dockerfile
# Dockerfile
FROM python:3.12-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt --no-cache-dir

COPY . .

CMD ["gunicorn", "app.main:app",
     "--workers", "4",
     "--worker-class", "uvicorn.workers.UvicornWorker",
     "--bind", "0.0.0.0:8000"]
# 让 Claude 根据项目自动生成 docker-compose.yml 你:帮我生成 docker-compose.yml,包含: FastAPI 应用、PostgreSQL 16、Redis 7, 应用要等数据库健康检查通过后再启动

来源:Claude Code 官方文档 - docs.anthropic.com/en/docs/claude-code

相关文章推荐

实战用 Claude Code 开发 FastAPI 后端:从设计到 Docker 部署完整实战Claude Code 开发 FastAPI 后端完整实战:项目结构设计、路由和依赖注入、Pydantic 数据验证、SQLAlchemy 异步 ORM、JWT 认证、后台任务、WebSocket、pytest 测试、Dockerfile 和 docker-compose 部署,全程 Claude Code 辅助。2026/3/15实战Claude Code Django 实战完全指南:从模型设计到 REST API 开发全流程Claude Code 辅助 Django 开发的完整实战指南:用 Claude Code 生成 Django 项目结构和 Models(含迁移文件)、Django REST Framework(DRF)API 开发(Serializer/ViewSet/Router)、用户认证系统(JWT/Session/第三方登录)、Django ORM 查询优化(select_related/prefetch_related/annotate)、异步任务(Celery + Redis)、测试用例生成(pytest-django)、Docker 化部署,以及在现有 Django 项目中快速定位和修复 Bug 的 Prompt 技巧。2026/3/26实战Claude Code 命令行工具开发实战:用 AI 快速构建专业 CLI 工具Claude Code 辅助命令行工具(CLI)开发的完整实战指南:Python Click/Typer、Go Cobra、Rust Clap 技术栈选型、用 Claude Code 生成完整 CLI 项目结构(参数解析/子命令/全局选项)、交互式提示和彩色输出、配置文件管理、Shell 自动补全生成、跨平台打包(PyInstaller/goreleaser),以及发布到 PyPI/npm/Homebrew 的完整流程。2026/3/26实战Claude Code 数据分析实战:Python 数据科学工作流 AI 加速完全指南Claude Code 在数据分析场景的完整使用指南:Jupyter Notebook 环境集成方式、CLAUDE.md 数据分析项目配置、让 Claude 自动完成数据探索(EDA)、Pandas 数据清洗脚本生成、Matplotlib/Seaborn 图表代码生成、统计分析和假设检验解读、机器学习模型选型建议、以及用自然语言描述分析需求让 Claude 生成完整 EDA 报告的实战技巧。2026/3/20实战用 Claude Code 写 Python 脚本:自动化日常任务的 8 个实用场景用 Claude Code 编写 Python 自动化脚本实战:8 个高频场景(文件批处理/Excel 处理/API 调用/定时任务/数据清洗/发送通知/Web 爬取/PDF 处理),每个场景给出完整 Prompt 模板和代码结构。2026/3/14实战Claude Code Vue 3 实战完全指南:Composition API 开发到企业级前端工程化Claude Code 辅助 Vue 3 开发的完整实战指南:Composition API 组件生成(setup/ref/computed)、Pinia 状态管理代码生成、Vue Router 4 路由配置、TypeScript 类型定义生成(Props/Emits)、Composables 抽象、Vitest 单元测试生成、性能优化(虚拟滚动/v-memo),以及 Options API 迁移和响应式丢失问题排查的 Prompt 模板。2026/3/26