FastAPI-3-使用Pydantic声明请求体

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel  # 用来声明请求体的库:1.提供运行时类型信息;2.返回友好错误提示
app = FastAPI()


class Item(BaseModel):    
    name: str
    price: float
    is_offer: Optional[bool] = None  # 可选参数,不传参数时为None,如果有值则为bool


@app.get("/")
def read_root():
    return {"Hello": "World"}


@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
    return {"item_id": item_id, "q": q}


@app.put("/items/{item_id}")
def update_item(item_id: int, item: Item):   # 路径中需要传item_id,请求体中传的参数符合Item模板
    return {"item_name": item.name, "item_id": item_id}

回到前面的代码示例,FastAPI 将会:

  • 校验 GET 和 PUT 请求的路径中是否含有 item_id
  • 校验 GET 和 PUT 请求中的 item_id 是否为 int 类型。
    • 如果不是,客户端将会收到清晰有用的错误信息。
  • 检查 GET 请求中是否有命名为 q 的可选查询参数(比如 http://127.0.0.1:8000/items/foo?q=somequery)。
    • 因为 q 被声明为 = None,所以它是可选的。
    • 如果没有 None 它将会是必需的 (如 PUT 例子中的请求体)。
  • 对于访问 /items/{item_id} 的 PUT 请求,将请求体读取为 JSON 并:
    • 检查是否有必需属性 name 并且值为 str 类型 。
    • 检查是否有必需属性 price 并且值为 float 类型。
    • 检查是否有可选属性 is_offer, 如果有的话值应该为 bool 类型。
    • 以上过程对于多层嵌套的 JSON 对象同样也会执行
  • 自动对 JSON 进行转换或转换成 JSON。
  • 通过 OpenAPI 文档来记录所有内容,可被用于:
    • 交互式文档系统
    • 许多编程语言的客户端代码自动生成系统
  • 直接提供 2 种交互式文档 web 界面。
posted @ 2022-01-26 11:19  Tarzen  阅读(163)  评论(0)    收藏  举报