6. FastApi请求参数

159 阅读2分钟
  1. 路径参数 (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 是强制类型申明 会强制类型转化 如果转化错误 会校验错误
  1. 查询参数 (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}
  1. 请求体 (Request Body)
  • 请求体用于 POSTPUTPATCH 请求,通常用来发送数据(如 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}
  1. 表单参数 (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}
  1. 文件上传 (File Uploads)
  • FastAPI 支持文件上传,允许通过表单字段上传文件。
  • 使用 FileUploadFile 来处理文件上传。
from fastapi import File, UploadFile

@app.post("/upload/")
async def upload_file(file: UploadFile = File(...)):
    return {"filename": file.filename}
  1. 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}
  1. 头部参数 (Header Parameters)
  • 如果你需要从请求的头部获取数据,可以使用 Header 类。
from fastapi import Header

@app.get("/items/")
async def get_items(user_agent: str = Header(None)):
    return {"user_agent": user_agent}
  1. Request参数 (Request参数 Parameters)
  • 如果你需要从Request参数获取数据,可以使用 Request参数 类。
from fastapi import Request

@app.get("/items/")
async def get_items(request: Request):
    return {"url": request.url}