您可以在任何路径操作中使用参数 response_model 声明用于响应的模型:
@app.get()
@app.post()
@app.put()
@app.delete()
etc.
一、response_model
1. 举例
from typing import List
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str = None
price: float
tax: float = None
tags: List[str] = []
@app.post("/items/", response_model=Item) async def create_item(item: Item):
return item
注意
response_model是“ decorator”方法(get,post等)的参数。 不像所有参数和主体一样,具有路径操作功能。
它接收的类型与您为Pydantic模型属性声明的类型相同,因此它可以是Pydantic模型,但也可以是例如 一个Pydantic模型的清单,例如List [Item]。
2. response_model功能
FastAPI 将使用 response_model 实现以下功能:
将输出数据转换为其类型声明。
验证数据。
在OpenAPI路径操作中为响应添加一个JSON模式。
将由自动文档系统使用。
最重要的功能:
将输出数据限制为模型的数据.
技术细节
响应模型在此参数中声明,而不是作为函数返回类型注释声明
因为路径函数实际上可能不会返回该响应模型,而是返回dict,数据库对象或其他模型,然后使用response_model,执行字段限制和序列化。
二、返回相同的输入数据
这里我们定义了一个UserIn模型,它会包含一个纯文本的密码:
from fastapi import FastAPI
from pydantic import BaseModel
from pydantic.types import EmailStr
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str email: EmailStr
full_name: str = None
# Don't do this in production!
# 不要在生产环境中使用这个!
@app.post("/user/", response_model=UserIn)
async def create_user(*, user: UserIn):
return user
我们正在使用此模型声明输入,并使用同一模型声明输出:
from fastapi import FastAPI
from pydantic import BaseModel
from pydantic.types import EmailStr
app = FastAPI()
class UserIn(BaseModel):
username: str
password: str
email: EmailStr
full_name: str = None
# Don