第10节,FastAPI返回json格式数据

1. 响应模型

在介绍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":"北京"}

2. 直接返回模型对象

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

3. 使用JSONResponse

使用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

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案