【FastAPI】Response 响应模型

说明

作用:响应模型数据格式的规范

定义响应体模型

from fastapi import FastAPI
from pydantic import BaseModel, EmailStr  # pip install pydantic[email]
import uvicorn

app = FastAPI()

class ResIn(BaseModel):  # 请求体模型
    id: int
    password: str
    email: EmailStr = None
    qq_num: str = '876545500'

class ResOut(BaseModel):  # 响应体模型 没有 password 字段
    id: int
    email: EmailStr = None
    qq_num: str = '876545500'

@app.post('/response',
          response_model=ResOut,
          response_model_exclude_unset=True  # 模型设置的默认值 不显示 在响应模型中,响应仅仅包含实际的值,如果实际的值与默认值相同也会显示
          )
async def response(res_in: ResIn):
    res = dict()
    res["id"] = res_in.id
    res["password"] = res_in.password  # 虽然赋值密码,实际响应 中也 不会显示
    res["email"] = res_in.email
    res["qq_num"] = res_in.qq_num
    return res

if __name__ == '__main__':
    uvicorn.run(app, host='127.0.0.1', port=8002)

请求 & 响应

# 请求
POST http://127.0.0.1:8002/response
{
  "id": 0,
  "password": "xxxxxxxx",
  "email": "user@example.com",
  "qq_num": "876545500"
}

# 响应 没有 passwors 字段
{
  "id": 0,
  "email": "user@example.com",
  "qq_num": "876545500"
}

响应模型的其他参数

from typing import List, Union

@app.post('/response',
          # response_model=ResOut,
          response_model=Union[ResOut, ResIn],  # ResOut & ResIn 模型字段的并集(所有字段都有)
          # response_model=List[ResOut],  # 响应为包含 ResOut模型的 列表
          # response_model_include=['id', 'qq_num'],  # 响应必须 包含的字段
          # response_model_exclude=['password'],  # 响应 排除的字段
          response_model_exclude_unset=True  # 模型设置的默认值 不显示 在响应模型中,响应仅仅包含实际的值,如果实际的值与默认值相同也会显示
          )
async def response(res_in: ResIn):
    return res_in
发表评论 / Comment

用心评论~