0%

FastAPI自学教程(3)- 路径参数

1.基础用法

1
2
3
4
5
6
7
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id: str):
return {"item_id": item_id}
  • 使用花括号 {} 声明路径参数
  • 参数值会传递给函数参数 item_id

2.带类型的路径参数

1
2
3
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
  • 添加类型注解(如 int)会自动进行:
    • 请求解析
    • 数据验证
    • 错误自动生成

3.路径顺序重要性

1
2
3
4
5
6
7
@app.get("/users/me")
async def read_user_me():
...

@app.get("/users/{user_id}")
async def read_user(user_id: str):
...
  • 固定路径应放在动态路径之前
  • 否则 /users/me 会被 /users/{user_id} 优先匹配

4.预设值路径参数

1
2
3
4
5
6
7
8
9
10
11
12
from enum import Enum

class ModelName(str, Enum):
alexnet = "alexnet"
resnet = "resnet"
lenet = "lenet"

@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
if model_name is ModelName.alexnet:
return {"model_name": model_name, "message": "Deep Learning FTW!"}
...
  • 使用枚举类限制参数取值范围
  • 自动生成包含可用值的API文档

5.路径参数包含路径

1
2
3
@app.get("/files/{file_path:path}")
async def read_file(file_path: str):
return {"file_path": file_path}
  • 使用 :path 参数转换器匹配包含斜杠的路径
  • 示例:/files//home/johndoe/myfile.txt 会匹配到 file_path="/home/johndoe/myfile.txt"

6.自动文档支持

  • 自动生成的交互式文档会显示:
    • 参数类型要求
    • 枚举可用值
    • 参数是否必需
    • 错误响应示例