- 路径参数 (Path Parameters)
- 路径参数是 URL 路径的一部分。例如,
/items/{item_id} 中的 item_id 就是一个路径参数。
- 使用
Path 类来定义路径参数并可以添加描述。
from fastapi import Path
@app.get("/items/{item_id}")
async def read_item(item_id: int = Path(..., description="The unique ID of the item")):
return {"item_id": item_id}
item_id: int 是强制类型申明 会强制类型转化 如果转化错误 会校验错误
- 查询参数 (Query Parameters)
- 查询参数出现在 URL 的
? 后面,通常用于过滤、排序等。可以是可选的。
- 使用
Query 类来定义查询参数。
from fastapi import Query
@app.get("/items/")
async def read_items(q: str = Query(None, description="Search query")):
return {"q": q}
- 请求体 (Request Body)
- 请求体用于 POST、PUT 和 PATCH 请求,通常用来发送数据(如 JSON、XML 等)。
- 使用 Pydantic 模型 来定义请求体的格式,并可以为字段添加描述。
- 请求体常用于提交较大或复杂的数据。
from pydantic import BaseModel
from fastapi import Body
from typing import Union, Opthional
class Item(BaseModel):
name: str
description: str
birth: Union[date, None] = None
desc: Opthional[str] = None
@app.post("/items/")
async def create_item(item: Item = Body(..., description="The item to create")):
return {"name": item.name, "description": item.description}
- 表单参数 (Form Parameters)
- 表单参数通常用于 POST 请求中的表单数据提交。
- 使用
Form 类来定义表单参数。
from fastapi import Form
@app.post("/submit/")
async def submit_form(name: str = Form(...), age: int = Form(...)):
return {"name": name, "age": age}
- 文件上传 (File Uploads)
- FastAPI 支持文件上传,允许通过表单字段上传文件。
- 使用
File 和 UploadFile 来处理文件上传。
from fastapi import File, UploadFile
@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
- Cookie 参数 (Cookie Parameters)
- 如果你需要从请求的 cookies 中获取数据,可以使用
Cookie 类。
from fastapi import Cookie
@app.get("/items/")
async def get_items(cookie_id: str = Cookie(None)):
return {"cookie_id": cookie_id}
- 头部参数 (Header Parameters)
- 如果你需要从请求的头部获取数据,可以使用
Header 类。
from fastapi import Header
@app.get("/items/")
async def get_items(user_agent: str = Header(None)):
return {"user_agent": user_agent}
- Request参数 (Request参数 Parameters)
- 如果你需要从Request参数获取数据,可以使用
Request参数 类。
from fastapi import Request
@app.get("/items/")
async def get_items(request: Request):
return {"url": request.url}