第 12 章: 注解、省略号(…)表示法和返回类型


本章概述

学习FastAPI中的类型注解、Ellipsis表示法和返回类型声明。


12.1 Ellipsis表示法

... (Ellipsis) 表示必填参数:

from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
def read_items(q: str = Query(...)):  # q是必填的
    return {"q": q}

说明:使用...作为默认值表示这个参数是必需的,用户必须提供这个值。


12.2 Annotated类型

Python 3.9+ 支持Annotated

from typing import Annotated
from fastapi import FastAPI, Query

app = FastAPI()

@app.get("/items/")
def read_items(q: Annotated[str, Query(min_length=3)]):
    return {"q": q}

说明Annotated允许你为类型添加元数据,FastAPI会读取这些元数据用于参数验证和文档生成。


12.3 返回类型

声明返回类型用于生成文档:

from typing import List
from pydantic import BaseModel

class Item(BaseModel):
    name: str
    price: float

@app.get("/items/", response_model=List[Item])
def read_items():
    return [
        {"name": "Item 1", "price": 10.5},
        {"name": "Item 2", "price": 20.0}
    ]

12.4 response_model的作用

  • 过滤返回数据:只返回模型中定义的字段
  • 生成API文档:自动生成响应示例
  • 验证返回数据:确保返回的数据符合模型定义

12.5 可选返回类型

from typing import Optional

@app.get("/items/{item_id}", response_model=Optional[Item])
def read_item(item_id: int):
    if item_id not in items:
        return None
    return items[item_id]

12.6 自定义响应

from fastapi.responses import JSONResponse

@app.get("/items/{item_id}")
def read_item(item_id: int):
    if item_id not in items:
        return JSONResponse(status_code=404, content={"message": "Not found"})
    return items[item_id]

小结

在本章中,我们学习了: - ✅ 使用Ellipsis (…) 表示必填参数 - ✅ 使用Annotated类型 - ✅ 声明返回类型用于文档生成 - ✅ 理解response_model的作用 - ✅ 自定义响应

在下一章中,我们将学习如何为FastAPI应用编写测试!