高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」

06-01 1137阅读

        以下是针对 FastAPI 的保姆级教程,包含核心概念、完整案例和关键注意事项,采用「基础 → 进阶 → 生产级」的三阶段教学法:

一、FastAPI介绍

        FastAPI 是一个现代化的、高性能的 Python Web 框架,专门用于构建 APIs(应用程序编程接口)。以下是它的核心特性和定位:

FastAPI 的本质

  1. 类型优先的框架:基于 Python 类型提示(Type Hints)

  2. 异步支持:原生兼容 async/await 语法

  3. 自动文档生成:内置 OpenAPI(Swagger)和 JSON Schema 支持

  4. 高性能:媲美 NodeJS 和 Go 的速度(Starlette 底层)

优势

FastAPI 核心优势

  1. 性能卓越:基于 Starlette(异步)和 Pydantic(类型校验)

  2. 开发效率:自动生成 Swagger/Redoc 文档

  3. 类型安全:Python 类型注解驱动

  4. 异步支持:原生 async/await 支持

对比

特性FastAPIFlaskDjango
异步支持✅ 原生❌ 需扩展❌ 需扩展
自动 API 文档✅ 内置❌ 需扩展❌ 需扩展
开发速度⚡️ 极快🏎️ 快🐢 中等
学习曲线📈 中等📉 低📈 高
性能🚀 最高🏎️ 中等🚗 中等

核心组件架构 

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」

典型应用场景

  1. 微服务架构:轻量级 API 服务

  2. 数据科学接口:机器学习模型部署

  3. 实时应用:WebSocket 支持

  4. 快速原型开发:即时 API 文档


二、环境准备

# 创建虚拟环境(Python≥3.8)
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate    # Windows
# 安装依赖
pip install "fastapi[all]" uvicorn

三、基础案例:用户管理系统

3.1. 项目结构高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」

user_api/
├── main.py          # 主应用
├── models.py        # Pydantic 模型
└── database.py      # 模拟数据库

3.2. 模型定义 (models.py)

from pydantic import BaseModel, EmailStr
class UserBase(BaseModel):
    email: EmailStr
class UserCreate(UserBase):
    password: str
class User(UserBase):
    id: int
    is_active: bool
    
    class Config:
        from_attributes = True  # 替换原来的 orm_mode

3.3. 数据库模拟 (database.py)

from typing import Dict
from models import User, UserCreate
fake_db: Dict[int, User] = {}
class UserCRUD:
    @staticmethod
    def create(user: UserCreate) -> User:
        user_id = len(fake_db) + 1
        db_user = User(id=user_id, email=user.email, is_active=True)
        fake_db[user_id] = db_user
        return db_user

3.4. 主应用 (main.py)

from fastapi import FastAPI, HTTPException
from database import UserCRUD, fake_db
from models import UserCreate, User
app = FastAPI() #这个实例将是创建你所有API的主要交互对象。这个app同样在如下命令中被uvicon所引用。这里 'app' 就是 Uvicorn 要运行的 ASGI 应用
@app.post("/users/", response_model=User)
async def create_user(user: UserCreate):
    return UserCRUD.create(user)
@app.get("/users/{user_id}", response_model=User)
async def read_user(user_id: int):
    if user_id not in fake_db:
        raise HTTPException(status_code=404, detail="User not found")
    return fake_db[user_id]

3.5. 启动与测试 

方式一:命令启动

uvicorn main:app --reload

高性能Python Web 框架--FastAPI 学习「基础 → 进阶 → 生产级」

  • 访问 http://127.0.0.1:8000/docs 查看交互文档

  • 测试请求:

    curl -X POST "http://127.0.0.1:8000/users/" \
    -H "Content-Type: application/json" \
    -d '{"email":"user@example.com","password":"secret"}'
    a.命令结构解析
    uvicorn main:app --reload
    部分含义
    uvicornASGI 服务器,用于运行 Python 异步 Web 应用
    main:app指定要运行的 Python 模块 (main.py) 和 FastAPI 实例 (app)
    --reload启用热重载(代码更改后自动重启服务器)
    b.详细解释
    (1) uvicorn

    Uvicorn 是一个基于 ASGI(Asynchronous Server Gateway Interface)的轻量级 Web 服务器,专为 Python 异步框架(如 FastAPI、Starlette)设计。它支持:

    • HTTP/1.1 和 HTTP/2

    • WebSockets

    • 高性能异步 I/O(基于 asyncio)

      (2) main:app
      • main 是 Python 模块文件名(main.py)。

      • app 是 FastAPI 实例的名称(通常在 main.py 中定义,如 app = FastAPI())。

        示例 main.py

        from fastapi import FastAPI
        app = FastAPI()  # 这里 `app` 就是 Uvicorn 要运行的 ASGI 应用
        @app.get("/")
        def home():
            return {"message": "Hello, World!"}

        Uvicorn 会:

        1. 导入 main.py 文件。

        2. 找到 app 变量(必须是 FastAPI 或 Starlette 实例)。

        3. 启动服务器并监听请求。

        (3) --reload
        • 开发模式:当代码发生更改时,Uvicorn 会自动重启服务器(无需手动重启)。

        • 仅用于开发:生产环境不应使用 --reload,因为它会降低性能。

          c.常见变体和选项
          命令用途
          uvicorn main:app基本启动(无热重载)
          uvicorn main:app --reload开发模式(自动重启)
          uvicorn main:app --host 0.0.0.0 --port 8000指定主机和端口
          uvicorn main:app --workers 4多进程模式(生产环境)
          uvicorn main:app --ssl-keyfile=key.pem --ssl-certfile=cert.pemHTTPS 支持
          d.执行流程
          1. 启动 Uvicorn:

            uvicorn main:app --reload
          2. Uvicorn 加载 main.py:

            • 导入 app = FastAPI()。

            • 注册所有路由(如 @app.get("/"))。

            • 监听请求:

              • 默认运行在 http://127.0.0.1:8000。

              • 热重载:

                • 如果 main.py 或相关文件被修改,Uvicorn 自动重启。

          e.生产环境 vs 开发环境
          场景推荐命令说明
          开发uvicorn main:app --reload方便调试,自动重启
          生产uvicorn main:app --workers 4多进程 + Gunicorn(推荐)
          HTTPSuvicorn main:app --ssl-keyfile=key.pem --ssl-certfile=cert.pem启用 SSL/TLS
          f.生产环境建议:
          gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app

          (Gunicorn 作为进程管理器 + Uvicorn 作为 Worker)

          g.常见问题

          Q1: 如何更改默认端口?

          uvicorn main:app --port 8080

          Q2: 如何让服务器对外访问(不仅仅是 localhost)?

          uvicorn main:app --host 0.0.0.0

          Q3: 如何调试 Uvicorn?

          uvicorn main:app --reload --log-level debug

          Q4: 为什么 --reload 不生效?

          • 确保文件被正确修改(某些编辑器可能不会立即保存)。

          • 检查 Uvicorn 是否检测到文件变化(查看日志)。

            h.总结
            • uvicorn main:app --reload 是一个用于 开发 的 FastAPI 启动命令。

            • main:app 表示从 main.py 导入 app(FastAPI 实例)。

            • --reload 启用热重载,方便开发调试。

            • 生产环境 应该使用 gunicorn + uvicorn 或多 Worker 模式。 

              方式二:程序启动

              1. 基本用法

              uvicorn.run() 是快速启动 ASGI 应用的便捷方法,基本语法如下:

              import uvicorn
              uvicorn.run(app, host="127.0.0.1", port=8000, log_level="info")
              2. 核心参数详解
              2.1 必需参数
              • app: ASGI 应用实例,可以是:

                • 字符串格式的模块导入路径(如 "main:app")

                • 直接的 ASGI 应用对象(如 FastAPI() 实例)

                • 任何符合 ASGI 规范的 callable

                  2.2 网络配置
                  • host (str, 默认 "127.0.0.1"):

                    • 绑定地址,"0.0.0.0" 表示监听所有可用网络接口

                    • 示例:host="0.0.0.0" 允许外部访问

                    • port (int, 默认 8000):

                      • 监听端口号

                      • 注意避免使用特权端口(

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码