FastAPI 返回数据类型
@app.get()
、@app.post
、@app.put
、@app.delete
四个操作函数,均可以添加返回类型模型
FastAPI在注解中添加response_model
,其功能如下
- 类型转换,FastAPI会根据返回类型模型,将返回数据进行类型转换,并返回给客户端
- 文档生成,FastAPI会根据返回类型模型,生成文档
- 类型验证,FastAPI会根据返回类型模型,对返回数据进行类型验证,并返回给客户端
@app.get("/item", response_model=Item)
def get_item() ->Any:
mock_item = Item(name="Foo", price=42, description="The pretender", is_offer=True)
- 上述例子中,
response_model=Item
指定了返回类型模型为Item
,FastAPI会根据Item
模型,将返回数据进行类型转换,并返回给客户端 - 虽然函数的返回值是Any,但服务返回的是
response_model
,FastAPI会根据response_model
,将返回数据进行类型转换,并返回给客户端
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
description: str = None
img: Image | None = None
tags: set[str] | None = set()
@app.get("/items", response_model=list[Item])
def get_items():
return [
{"name": "Sherlock",
"price": 22,
"description": "The pretender",
"is_offer": True
},
{
"name": "Foo",
"price": 42,
"description": "The pretender",
"is_offer": True,
}
]
- 上述例子中,
response_model=list[Item]
指定了返回类型模型为list[Item]
,FastAPI会根据list[Item]
模型,将返回数据进行类型转换,并返回给客户端 - 函数的返回值是一个数组,数组会自动映射为返回类的对象,如果返回的属性不在数组元素中,则会自动赋null值
class UserIn(BaseModel):
user_name: str
user_password:str
user_full_name:str
class UserOut(BaseModel):
user_name:str
user_full_name:str
@app.post("/register",response_model=UserOut)
def register_item(user:UserIn) -> UserIn:
return user
- 上述例子中,入参对象与返回对象相同,但是定义了
response_model=UserOut
,返回时不会传递user_password
的值