展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > 从入门到生产详解Python中FastAPI的全攻略

从入门到生产详解Python中FastAPI的全攻略

引言:Python Web 开发的新宠儿 在 Python Web 开发这个领域,FastAPI 的崛起速度确实有点吓人。截至 2025 年,它在 GitHub 上的 Star 数已经突破了 80k,成为增长最快的 Python Web 框架。更直接的数据是,2025 年已有 38% 的 Pytho

本文目录

    引言:Python Web 开发的新宠儿

    在 Python Web 开发这个领域,FastAPI 的崛起速度确实有点吓人。截至 2025 年,它在 GitHub 上的 Star 数已经突破了 80k,成为增长最快的 Python Web 框架。更直接的数据是,2025 年已有 38% 的 Python 开发者在使用 FastAPI,比 2024 年增长了 40%,而且超过一半的财富 500 强企业已经在生产环境中部署了 FastAPI 应用。

    这就不禁让人好奇:它到底凭什么这么受欢迎?这篇文章会从零开始,把 FastAPI 的核心知识点——从环境搭建到生产部署——一次性讲清楚。

    一、FastAPI 是什么

    FastAPI 是一个现代、高性能的 Web 框架,专门用来构建 API,基于 Python 3.7+ 的类型提示。它的底层架构建立在两个强大的库之上:Starlette(高性能 ASGI 框架)和 Pydantic(高性能数据校验库)。

    1.1 核心特性

    特性描述
    高性能基于 Starlette + Pydantic,性能可媲美 Node.js 和 Go
    自动 API 文档内置 Swagger UI(/docs)和 ReDoc(/redoc)
    类型提示驱动利用 Python 类型注解自动校验请求和响应
    原生异步支持完全支持 async/await,适合高并发 I/O 场景
    依赖注入系统灵活的 Depends 机制,支持权限校验、数据库会话管理等

    1.2 FastAPI 架构:ASGI + Pydantic

    FastAPI 通过 ASGI 异步框架突破了传统 WSGI(比如 Flask、Django)同步阻塞模型的性能天花板。实测数据显示,FastAPI 单节点 QPS 能达到 3000+,大约是 Flask 的 5-8 倍。

    下面这张图展示了 FastAPI 处理请求的整体流程:

    从入门到生产详解Python中FastAPI的全攻略

    二、环境搭建与第一个 FastAPI 应用

    2.1 安装依赖

    确保你的 Python 版本 ≥ 3.7,推荐使用虚拟环境来隔离项目依赖:

    # 创建并激活虚拟环境
    python -m venv fastapi_env
    source fastapi_env/bin/activate  # Linux/macOS
    # 或 fastapi_envScriptsactivate  # Windows
    
    # 安装 FastAPI 和 Uvicorn(ASGI 服务器)
    pip install fastapi uvicorn[standard]
    

    2.2 第一个 Hello World 应用

    创建一个 main.py 文件:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def read_root():
        return {"message": "Hello, FastAPI!"}
    

    运行服务:

    uvicorn main:app --reload --host 0.0.0.0 --port 8000

    • --reload:代码变更时自动重启,便于开发调试
    • --host 0.0.0.0:允许外部访问(仅本地开发)
    • --port 8000:指定端口

    现在打开浏览器访问 http://localhost:8000,你会看到返回的 JSON 数据。再访问 http://localhost:8000/docs,你会惊喜地发现 Swagger UI 自动生成了交互式 API 文档——无需编写任何额外的文档代码。

    三、路由与请求参数

    3.1 请求处理的完整流程

    在深入各种参数之前,我们先理解 FastAPI 的请求处理流程:

    从入门到生产详解Python中FastAPI的全攻略

    3.2 路径参数

    路径参数直接从 URL 路径中提取:

    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/users/{user_id}")
    async def get_user(user_id: int):
        return {"user_id": user_id}
    

    FastAPI 会自动将 user_id 转换为 int 类型,如果传入非数字值会自动返回 422 校验错误。

    3.3 查询参数

    查询参数通过函数参数的默认值或 Query 类来定义:

    from fastapi import FastAPI, Query
    
    @app.get("/items/")
    async def read_items(
        item_id: int = Query(..., description="商品ID", ge=1),
        q: str = None,
        limit: int = Query(10, ge=1, le=100)
    ):
        return {"item_id": item_id, "q": q, "limit": limit}
    
    • Query(...) 中的 ... 表示必填参数
    • ge/le 表示数值的最小/最大约束
    • description 会在自动文档中展示参数说明

    3.4 请求体与 Pydantic 模型

    对于 POST、PUT 请求,使用 Pydantic 模型来定义和校验请求体:

    from fastapi import FastAPI
    from pydantic import BaseModel, Field
    
    app = FastAPI()
    
    class Item(BaseModel):
        name: str = Field(..., min_length=1, max_length=100)
        description: str | None = None
        price: float = Field(..., gt=0, description="价格必须大于0")
        tax: float | None = None
        
        # Pydantic v2 支持 model_config 进行额外配置
        model_config = {
            "json_schema_extra": {
                "example": {
                    "name": "iPhone 15",
                    "description": "最新款智能手机",
                    "price": 6999.0,
                    "tax": 699.9
                }
            }
        }
    
    @app.post("/items/")
    async def create_item(item: Item):
        item_dict = item.model_dump()  # Pydantic v2 使用 model_dump 替代 dict
        if item.tax:
            price_with_tax = item.price + item.tax
            item_dict["price_with_tax"] = price_with_tax
        return item_dict
    

    Pydantic 在运行时自动完成:

    • 字段类型检查(如 price 必须为浮点数)
    • 必填/可选字段控制
    • 数值范围约束
    • 嵌套模型支持

    3.5 路由分组(APIRouter)

    对于大型项目,使用 APIRouter 进行模块化拆分:

    from fastapi import APIRouter, FastAPI
    
    # 创建路由模块
    user_router = APIRouter(prefix="/users", tags=["users"])
    item_router = APIRouter(prefix="/items", tags=["items"])
    
    @user_router.get("/{user_id}")
    async def get_user(user_id: int):
        return {"user_id": user_id}
    
    @item_router.get("/")
    async def list_items():
        return {"items": []}
    
    # 注册到主应用
    app = FastAPI()
    app.include_router(user_router)
    app.include_router(item_router)
    

    APIRouter 支持 prefix(路径前缀)、tags(文档分组标签)、responses(统一响应格式)等配置,非常适合微服务架构的模块拆分。

    四、依赖注入(Depends)

    依赖注入是 FastAPI 最强大的特性之一。它的本质是通过外部传入依赖对象,而非在函数内部直接创建,从而将依赖管理从业务逻辑中解耦。

    4.1 依赖注入的工作原理

    从入门到生产详解Python中FastAPI的全攻略

    4.2 基础函数依赖

    from fastapi import FastAPI, Depends
    
    app = FastAPI()
    
    # 定义一个可复用的依赖函数
    def get_current_user(token: str = "fake_token"):
        # 实际项目中会从 Header 或 Cookie 中解析 token
        return {"username": "john_doe", "role": "admin"}
    
    @app.get("/profile")
    async def read_profile(user: dict = Depends(get_current_user)):
        return {"message": f"Hello, {user['username']}!"}
    

    4.3 数据库连接依赖

    这是依赖注入最经典的应用场景——管理数据库会话生命周期:

    from sqlalchemy.orm import Session
    from database import SessionLocal
    
    def get_db():
        db = SessionLocal()
        try:
            yield db
        finally:
            db.close()  # 请求结束后自动关闭连接
    
    @app.get("/users/")
    async def read_users(db: Session = Depends(get_db)):
        return db.query(User).all()
    

    yield 关键字让 FastAPI 能够在请求处理完毕后执行 finally 块中的清理代码,优雅地管理资源生命周期。

    4.4 依赖链与缓存

    from functools import lru_cache
    
    # 使用 lru_cache 缓存昂贵资源,避免重复创建
    @lru_cache()
    def get_settings():
        # 模拟从配置文件或环境变量加载
        return {"debug": True, "database_url": "..."}
    
    def get_db(settings: dict = Depends(get_settings)):
        db_url = settings["database_url"]
        # 创建数据库连接...
        return db
    
    @app.get("/config")
    async def read_config(settings: dict = Depends(get_settings)):
        return settings
    

    使用 @lru_cache 装饰的依赖在整个应用生命周期中只会执行一次,适合配置加载、模型加载等场景。

    五、中间件与 CORS 跨域

    5.1 中间件的执行流程

    从入门到生产详解Python中FastAPI的全攻略

    5.2 CORS 中间件配置

    前后端分离项目中,CORS 跨域问题是必须要解决的:

    from fastapi import FastAPI
    from fastapi.middleware.cors import CORSMiddleware
    
    app = FastAPI()
    
    # 开发环境:允许所有来源
    origins = ["*"]
    
    # 生产环境:精确控制
    origins = [
        "https://yourdomain.com",
        "https://admin.yourdomain.com",
        "http://localhost:3000",  # 本地开发
    ]
    
    app.add_middleware(
        CORSMiddleware,
        allow_origins=origins,
        allow_credentials=True,  # 允许携带 Cookie
        allow_methods=["GET", "POST", "PUT", "DELETE"],
        allow_headers=["Content-Type", "Authorization"],
        max_age=86400,  # 预检请求缓存 24 小时
    )
    

    关键注意点:当 allow_credentials=True 时,allow_origins 不能使用 ["*"],必须明确列出允许的来源列表。

    5.3 自定义中间件

    from fastapi import Request
    import time
    
    @app.middleware("http")
    async def add_process_time_header(request: Request, call_next):
        start_time = time.time()
        response = await call_next(request)
        process_time = time.time() - start_time
        response.headers["X-Process-Time"] = str(process_time)
        return response
    

    六、数据库集成(SQLAlchemy 2.0 异步)

    FastAPI 的异步特性与 SQLAlchemy 2.0 的异步支持是天作之合。传统同步 ORM 在高并发场景下会成为性能瓶颈,而异步 ORM 可以在等待数据库响应的 I/O 空闲期处理其他请求,极大提升并发能力。

    6.1 异步数据库架构

    从入门到生产详解Python中FastAPI的全攻略

    6.2 配置异步引擎

    首先安装依赖:

    pip install sqlalchemy asyncpg alembic

    配置异步引擎和会话工厂:

    from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
    from sqlalchemy.orm import DeclarativeBase
    
    # PostgreSQL 异步驱动 URL
    DATABASE_URL = "postgresql+asyncpg://user:password@localhost/dbname"
    
    # 创建异步引擎
    engine = create_async_engine(
        DATABASE_URL,
        echo=True,          # 开发时打印 SQL
        future=True,        # 使用 2.0 风格 API
        pool_size=10,       # 连接池大小
        max_overflow=20,    # 最大溢出连接数
    )
    
    # 创建异步会话工厂
    AsyncSessionLocal = async_sessionmaker(
        bind=engine,
        class_=AsyncSession,
        expire_on_commit=False,  # commit 后不使属性过期
        autocommit=False,
        autoflush=False,
    )
    
    # 定义模型基类
    class Base(DeclarativeBase):
        pass
    

    expire_on_commit=False 是一个重要的性能优化配置——在 Web 请求上下文中,我们通常在请求结束时就丢弃会话,无需让属性过期后再查询。

    6.3 异步依赖注入

    from fastapi import Depends
    
    async def get_db() -> AsyncSession:
        async with AsyncSessionLocal() as session:
            try:
                yield session
                await session.commit()
            except Exception:
                await session.rollback()
                raise
            # async with 上下文会自动关闭 session
    
    @app.get("/users/")
    async def list_users(db: AsyncSession = Depends(get_db)):
        from sqlalchemy import select
        result = await db.execute(select(User))
        return result.scalars().all()
    
    @app.post("/users/")
    async def create_user(user_data: UserCreate, db: AsyncSession = Depends(get_db)):
        new_user = User(**user_data.model_dump())
        db.add(new_user)
        await db.flush()  # 获取数据库生成的 ID
        await db.refresh(new_user)
        return new_user
    

    七、测试与部署

    7.1 使用 TestClient 进行单元测试

    FastAPI 提供了 TestClient,它基于 httpx,可以模拟 HTTP 请求而无需真正启动服务器:

    # test_main.py
    from fastapi.testclient import TestClient
    from main import app
    
    client = TestClient(app)
    
    def test_read_root():
        response = client.get("/")
        assert response.status_code == 200
        assert response.json() == {"message": "Hello, FastAPI!"}
    

    运行测试:

    pip install pytest httpx
    pytest test_main.py -v
    

    7.2 依赖覆盖——数据库测试的杀手锏

    FastAPI 的 dependency_overrides 是测试数据库相关 API 的利器。你可以将真实的数据库依赖替换为 SQLite 内存数据库,实现“跑完即焚”:

    from fastapi.testclient import TestClient
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    from main import app, get_db
    
    # 创建内存数据库
    SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"
    engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False})
    TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
    
    def override_get_db():
        try:
            db = TestingSessionLocal()
            yield db
        finally:
            db.close()
    
    # 覆盖真实依赖
    app.dependency_overrides[get_db] = override_get_db
    
    client = TestClient(app)
    
    def test_create_user():
        response = client.post("/users/", json={"name": "test", "email": "test@example.com"})
        assert response.status_code == 200
    

    7.3 生产部署建议

    从入门到生产详解Python中FastAPI的全攻略

    生产环境部署命令示例:

    # 使用 Gunicorn 管理 Uvicorn 多进程
    gunicorn main:app 
        --workers 4 
        --worker-class uvicorn.workers.UvicornWorker 
        --bind 0.0.0.0:8000 
        --access-logfile - 
        --error-logfile -

    八、总结

    FastAPI 凭借其类型提示驱动、自动文档生成、异步高性能、依赖注入系统四大核心优势,已经成为 Python Web 开发的主流框架选择。

    本文从零开始,涵盖了 FastAPI 的核心知识点:

    • 环境搭建与基础应用
    • 路由设计与请求参数处理
    • Pydantic 数据验证
    • 依赖注入(Depends)系统
    • 中间件与 CORS 配置
    • SQLAlchemy 2.0 异步数据库集成
    • 测试与生产部署

    掌握这些内容,你已经可以独立开发一个生产级别的 FastAPI 应用了。接下来,你可以进一步学习 FastAPI 的高级特性,如 WebSocket 支持、后台任务(BackgroundTasks)、自定义异常处理等,让你的 FastAPI 技能更加全面。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Python
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Postman macOS版
    Postman macOS版

    Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。

    Docker Desktop macOS版
    Docker Desktop macOS版

    Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。

    Android Studio macOS版
    Android Studio macOS版

    Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。

    Xcode macOS版
    Xcode macOS版

    Xcode 是苹果面向 Mac 提供的官方集成开发环境,将代码编辑、项目构建、SwiftUI 实时预览、设备模拟、自动化测试、断点调试、性能分析和应用分发整合在同一套工作流中,适合开发与维护 iPhone、iPad、Mac、Apple Wa

    JetBrains WebStorm macOS版
    JetBrains WebStorm macOS版

    JetBrains WebStorm 是面向 JavaScript、TypeScript 和现代 Web 技术的专业集成开发环境,可智能理解项目结构,提供代码补全、重构、错误检查、运行调试、测试及 Git 工具。

    PhpStorm macOS版
    PhpStorm macOS版

    PhpStorm 是 JetBrains 推出的专业 PHP 集成开发环境,可在 Mac 上完成代码编写、智能检查、重构、调试、测试和数据库管理。它支持主流 PHP 框架、Composer、Git、Docker 与远程解释器。

    JetBrains PyCharm macOS版
    JetBrains PyCharm macOS版

    JetBrains PyCharm 是面向 Python 开发者的集成开发环境,提供智能补全、代码检查、重构、调试、测试、版本控制及虚拟环境管理功能。Mac 版兼容 Intel 与 Apple 芯片,核心功能可免费使用。

    JetBrains IntelliJ IDEA macOS版
    JetBrains IntelliJ IDEA macOS版

    IntelliJ IDEA 是 JetBrains 推出的专业集成开发环境,重点服务于 Java、Kotlin 与 JVM 项目开发。软件集成代码补全、静态检查、重构、调试、测试、版本控制及构建工具,并可借助插件扩展语言和框架支持。

    Visual Studio Code macOS版
    Visual Studio Code macOS版

    Visual Studio Code 是微软提供的免费代码编辑器,支持 macOS,并为 Intel 与 Apple 芯片 Mac 提供适配版本。软件集代码编辑、调试、Git 源代码管理、集成终端和扩展市场于一体。

    REAPER macOS版
    REAPER macOS版

    REAPER是Cockos开发的数字音频工作站,提供多轨音频与MIDI录制、剪辑、处理、混音和母带制作工具。Mac版兼容Intel与Apple芯片,支持AU、VST、VST3、CLAP等插件格式,并提供高度可定制的工作流程。

    Adobe Audition macOS版
    Adobe Audition macOS版

    Adobe Audition 是面向播客、影视后期、音乐制作及内容创作者的专业音频工作站,提供波形精修、多轨录制与混音、频谱编辑、降噪修复、响度匹配和效果处理工具,并可与 Adobe Premiere 协同完成视频声音制作。

    Pro Tools macOS版
    Pro Tools macOS版

    Pro Tools 是 Avid 推出的专业数字音频工作站,覆盖多轨录音、无损剪辑、MIDI 编曲、插件处理、自动化混音及声音与画面同步等工作。它拥有 Intro、Artist、Studio 和 Ultimate 等方案。

    WINDOWS 更多
    PixPix 网页版
    PixPix 网页版

    PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。

    Postman Windows版
    Postman Windows版

    Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等

    Docker Desktop Windows版
    Docker Desktop Windows版

    Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。

    Android Studio Windows版
    Android Studio Windows版

    Android Studio 是 Google 面向 Android 应用开发提供的官方集成开发环境,以 IntelliJ IDEA 为基础,集成智能代码编辑、Gradle 构建、设备模拟、界面预览、调试测试及性能分析工具,

    JetBrains WebStorm Windows版
    JetBrains WebStorm Windows版

    WebStorm 是 JetBrains 面向 JavaScript、TypeScript 和现代 Web 技术打造的集成开发环境。它提供项目级代码分析、智能补全、安全重构、导航搜索,并集成调试、测试、终端、Git 与常用前端工具,

    JetBrains PhpStorm Windows版
    JetBrains PhpStorm Windows版

    PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

    JetBrains PyCharm Windows版
    JetBrains PyCharm Windows版

    PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,

    JetBrains IntelliJ IDEA Windows版
    JetBrains IntelliJ IDEA Windows版

    JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

    Visual Studio Code Windows版
    Visual Studio Code Windows版

    Visual Studio Code 是微软推出的免费代码编辑器,Windows 版集成智能补全、代码导航、调试、终端和版本控制,并可通过扩展添加语言、格式化及远程开发能力。它启动较快、配置灵活,

    REAPER Windows版
    REAPER Windows版

    REAPER 是 Cockos 推出的数字音频工作站,适用于录音、MIDI 编曲、音频编辑、混音、母带制作及声音设计。软件安装包小巧,支持多轨录制、灵活路由、自动化、第三方插件和脚本扩展,并提供完整功能的 60 天免费评估期。

    Adobe Audition Windows版
    Adobe Audition Windows版

    Adobe Audition 是面向播客、影视后期、广播与音乐制作的专业音频工作站,提供波形编辑、多轨混音、频谱分析、录音、降噪修复和效果处理等功能。Windows 版通过 Adobe Creative Cloud 安装和管理,

    Pro Tools Windows版
    Pro Tools Windows版

    Pro Tools 是 Avid 推出的专业数字音频工作站,提供多轨录音、音频剪辑、MIDI编曲、插件处理、自动化混音及影视声音制作能力。它适合音乐人、录音师、制作人和音频后期团队使用,并提供免费入门版、订阅方案及永久授权选择。