在介绍FastAPI如何解析POST请求体时,介绍了通过继承BaseModel来定义数据模型,pydantic可以帮助你对请求的json数据进行类型和格式的检查。在FastAPI返回数据时,也可以通过继承BaseModel来定义响应模型,对返回的json数据做schema校验。
from pydantic import BaseModel
from fastapi import FastAPI
app = FastAPI()
class UserInfo(BaseModel):
name: str
age: int
address: str
@app.get('/user/{uid}', response_model=UserInfo)
def user_info(uid: int):
return {'name': 'lili', 'age': 20, 'address': '北京', 'uid': uid}
在get装饰器里通过response_model参数声明响应模型,尽管函数里返回的数据里包含了uid字段,但UserInfo模型会根据自身的定义对返回的json数据进行检查,校验字段类型是否符合要求,多出来的uid字段不会返回给客户端,在浏览器里访问http://127.0.0.1:8000/user/3, 得到的结果是
{"name":"lili","age":20,"address":"北京"}
FastAPI允许你直接返回模型对象,前提是你要正确的创建模型对象实例。
@app.get('/user/{uid}', response_model=UserInfo)
def user_info(uid: int):
data = {'name': 'lili', 'age': 20, 'address': '北京', 'uid': uid}
user = UserInfo(**data)
return user
使用JSONResponse 可直接返回json数据,和响应模型的区别在于JSONResponse不会帮你做schema校验
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get('/user/{uid}')
def user_info(uid: int):
return JSONResponse(content={'name': 'lili', 'age': 20, 'address': '北京', 'uid': uid})
QQ交流群: 211426309