FastAPI(19)- Response Model 响应模型 (下)

简介: FastAPI(19)- Response Model 响应模型 (下)

正确传参的请求结果

image.png


查看 Swagger API 文档

微信图片_20220515144105.png


来看看路径操作有什么关于响应模型的参数


image.png


response_model_exclude_unset


作用

  • 有时候数据会有默认值,比如数据库中设置了默认值,不想返回这些默认值怎么办?
  • response_model_exclude_unset=True  设置该参数后就不会返回默认值,只会返回实际设置的值,假设没设置值,则不返回该字段

 

实际代码

class Item(BaseModel):
    name: str
    price: float
    # 下面三个字段有默认值
    description: Optional[str] = None
    tax: float = 10.5
    tags: List[str] = []
items = {
    "foo": {"name": "Foo", "price": 50.2},
    "bar": {"name": "Bar", "description": "The bartenders", "price": 62, "tax": 20.2},
    "baz": {"name": "Baz", "description": None, "price": 50.2, "tax": 10.5, "tags": []},
}
@app.get("/items/{item_id}", response_model=Item, response_model_exclude_unset=True)
async def read_item(item_id: str):
    # 从上面 items 字典中,根据 item_id 取出对应的值并返回
    return items[item_id]


item_id=foo 的请求结果

image.png

不会返回有默认值的字段

 

item_id=bar 的请求结果

image.png

只返回了设置值的字段

 

item_id=baz 的请求结果

image.png

  • 五个字段都有设置值,所有都包含在响应数据中了
  • 即使 description、tax、tags 设置的值和默认值是一样的,FastAPI 仍然能识别出它们是明确设置的值,所以会包含在响应数据中

 

response_model_include、response_model_exclude


作用

  • include:包含
  • exclude:排除
  • 其实就是响应模型只要包含/排除有些属性

 

参数数据类型

  • 从上面可以看到,这两个参数的类型都是 Optional[Union[SetIntStr, DictIntStrAny]]
  • Optional:可选
  • Union:联合类型
  • 既可以是 SetIntStr,也可以是 DictIntStrAny,满足其一即可

 

SetIntStr、DictIntStrAny

查看源码可以看到

# set 类型,子元素类型可以是 int、str

SetIntStr = Set[Union[int, str]]


# dict 类型,键类型可以是 int、str,值类型可以是任意类型

DictIntStrAny = Dict[Union[int, str], Any]

 

官方建议

  • 不推荐使用这两个参数,而推荐使用上面讲到的思想,通过多个类来满足请求模型、响应模型
  • 因为在 OpenAPI 文档中可以看到 Model 完整的 JSON Schema

 

response_model_include 的栗子


结合上面注册功能的栗子:请求要密码,响应不要密码

class User(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: Optional[str] = None
@app.post("/user/", response_model=User, response_model_include={"username", "email", "full_name"})
async def create_user(user: User):
    return user


正确传参的请求结果

微信图片_20220515144304.png


查看 Swagger API 文档

微信图片_20220515144323.png


passwor 仍然存在,这明显不是我们想要的最佳效果,所以还是推荐用多个类的思想

 

response_model_exclude 的栗子

class User(BaseModel):
    username: str
    password: str
    email: EmailStr
    full_name: Optional[str] = None
@app.post("/user/", response_model=User, response_model_exclude={"password"})
async def create_user(user: User):
    return user


正确传参的请求结果请求结果

 

同 include

 

查看 Swagger API 文档

同 include

相关文章
|
6月前
|
JSON API 持续交付
逐步指南:使用FastAPI部署YOLO模型的步骤
逐步指南:使用FastAPI部署YOLO模型的步骤
|
数据库
FastAPI(53)- Response Headers 响应设置 Headers
FastAPI(53)- Response Headers 响应设置 Headers
542 0
FastAPI(53)- Response Headers 响应设置 Headers
|
3月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
232 1
|
3月前
|
存储 缓存 NoSQL
【性能飙升的秘密】FastAPI应用如何借助缓存技术实现极速响应?揭秘高效Web开发的制胜法宝!
【8月更文挑战第31天】FastAPI是一个高性能Web框架,利用Starlette和Pydantic实现高效API构建。本文介绍如何通过缓存提升FastAPI应用性能,包括使用`starlette-cache[redis]`实现Redis缓存,以及缓存一致性和缓存策略的注意事项。通过具体示例展示了缓存的配置与应用,帮助开发者构建更高效的Web应用。
186 0
|
JSON Kubernetes API
使用FastAPI部署Ultralytics YOLOv5模型
YOLO是You Only Look Once(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以在本文中,我们将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。
283 5
|
JSON NoSQL API
全面拥抱 FastApi — 响应模型
全面拥抱 FastApi — 响应模型
|
机器学习/深度学习 Python
【Python】fastapi框架之Web部署机器学习模型
【Python】fastapi框架之Web部署机器学习模型
|
JavaScript API 网络安全
FastAPI(52)- Response Cookies 响应设置 Cookies
FastAPI(52)- Response Cookies 响应设置 Cookies
398 0
FastAPI(52)- Response Cookies 响应设置 Cookies
|
NoSQL 测试技术 Redis
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)
FastAPI(八十四)实战开发《在线课程学习系统》--接口测试(下)