from fastapi import FastAPI import uvicorn app = FastAPI() @app.post("/items") async def read_item(item: dict): return {"item": item} if __name__ == "__main__": uvicorn.run(app="6_request:app", host="127.0.0.1", port=8080, reload=True, debug=True)
指定查询参数的类型为 dict
是 json 格式,符合预期
选了 text 之后,因为不是 JSON 字符串,FastAPI 无法正确解析请求体为 dict,所以会报类型错误的提示
类型是 text
from fastapi import FastAPI from typing import Optional from pydantic import BaseModel app = FastAPI() # 自定义一个 Pydantic 模型 class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.post("/items/") # item 参数的类型指定为 Item 模型 async def create_item(item: Item): return item
正常传参,所有属性按指定的类型进行传数据
FastAPi 会自动将传进来的值转换为指定类型的值
如果转换失败,则会报 type_error 错误(如下图)
model 的 JSON Schema 会成为 Swagger APi 文档的一部分
因为知道 name 属性的类型是 str,所以 IDE 会智能提示 str 内置的方法
from typing import Optional from fastapi import FastAPI from pydantic import BaseModel class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None app = FastAPI() @app.put("/items/{item_id}") async def create_item( # 路径参数 item_id: int, # 请求体,模型类型 item: Item, # 查询参数 name: Optional[str] = None): result = {"item_id": item_id, **item.dict()} print(result) if name: # 如果查询参数 name 不为空,则替换掉 item 参数里面的 name 属性值 result.update({"name": name}) return result
打印 result 的值
{‘item_id‘: 1234, ‘name‘: ‘小菠萝‘, ‘description‘: ‘描述,非必填‘, ‘price‘: 12.22, ‘tax‘: 0.0}
原文:https://www.cnblogs.com/poloyy/p/15309691.html