FastAPI 是不是 Python 开发高性能 Web 应用的框架?
摘要:1 FastAPI 框架 核心认知:FastAPI 的本质优势 FastAPI 不是"另一个 Flask",它的设计哲学是"声明式编程"
1 FastAPI 框架
核心认知:FastAPI 的本质优势
FastAPI 不是"另一个 Flask",它的设计哲学是"声明式编程"——你描述数据长什么样,框架自动处理验证、序列化、文档生成。
Pydantic 模型:数据的第一道防线
核心思想:用 Python 类定义数据结构,自动获得验证能力。
详情参见: Python Pydantic 库 = Python 类型提示 + 自动数据校验 + 数据转换 - 博客园/千千寰宇
基础示例
from pydantic import BaseModel, Field, EmailStr
from typing import Optional
from datetime import datetime
class CreateUserRequest(BaseModel):
"""创建用户的请求模型"""
name: str = Field(min_length=2, max_length=50, description="用户名")
email: EmailStr # 自动验证邮箱格式
age: int = Field(ge=13, le=120, description="年龄范围") # 边界检查
password: str = Field(min_length=8, description="密码长度")
bio: Optional[str] = Field(None, max_length=500) # 可选字段
class UserResponse(BaseModel):
"""返回给客户端的数据模型(隐藏敏感信息)"""
id: int
name: str
email: str
created_at: datetime
# 注意:这里不包含 password!
易错点:
❌ 混淆 CreateUserRequest 和 UserResponse——前者接收输入,后者控制输出,安全的关键
❌ 忘记 Optional 或默认值,导致字段变成必填
路径操作:定义 API 端点
from fastapi import FastAPI, HTTPException, Path, Query
app = FastAPI()
# 路径参数 + 查询参数 + 请求体
@app.post("/users/", response_model=UserResponse, status_code=201)
async def create_user(
user: CreateUserRequest, # 请求体自动解析为 Pydantic 对象
referral_code: Optional[str] = Query(None, description="推荐码") # 查询参数
):
"""
创建新用户
- FastAPI 自动验证 user 是否符合 UserCreate 规则
- 验证失败时返回 422 错误,无需手动编写
- response_model 确保只返回 UserResponse 定义的字段
"""
# 模拟数据库操作
if email_exists(user.email):
raise HTTPException(status_code=400, detail="邮箱已被注册")
new_user = save_to_db(user)
return new_user # 自动转换为 JSON,过滤敏感字段
关键概念:
依赖注入(Depends):这是 FastAPI 的杀手级特性,大二阶段必须掌握
依赖注入系统(核心难点)
为什么要用? 避免在每个端点重复写数据库连接、认证逻辑,实现"关注点分离"。
