问题: fastapi response_model 默认会将 pydantic 的别名作为字段名输出。将导致同一个 ORM 模型属性的多个 pydantic 字段不能显示(被覆盖。

解决方法

在路由的装饰器上关闭一项默认配置 response_model_by_alias

@router.get('/me_all', response_model=List[schemas.Article], response_model_by_alias=False)

吐槽

是什么导致这个问题

一个 ORM 模型的时间需要两种显示方案:

class ArticleInDB(ArticleBase):
    date: datetime.datetime = Field(None, alias="date_time")
    time: datetime.datetime = Field(None, alias="date_time")

# 实际输出
# {'date_time': "2020-11-24T23:38:29"}

输出了别名,同时下一个属性覆盖了上一个属性。

查找问题原因顺序

  1. 在 pydantic 官网发现, pydantic 模型导出对象时可传入配置 ArticleInDB(**testDict).dict(by_alias = False) 在返回的字典中是否应将字段别名用作键;默认 Fales. 这也是默认值

  2. 进而去 fastapi 查看它是如何序列化对象的,只找到了这个:response_model_include 排除模型中的字段。证明可以传入配置(有点头绪。但还是没有找到传入 alias 配置的说明。

  3. 但是突然脑子一抽🙃,查看了下源码。发现: response_model_by_alias: bool = True, 它给了这个接口。

问题: pydantic 默认是将此项配置设为 False 的,而 fastapi 对他进行了封装,但是将别人默认关闭的配置开启。同时在文档中也没有说明。就...

耗时:大半个下午!


相关推荐:

来自系列:python 随笔

分类 python下文章:

1.0 爬虫的介绍,和requests模块的简单使用

1.1 数据解析的三种方式。正则表达式, bs4, xpath

2.0 多任务(进程,协程,线程)爬虫:验证码识别,返回头储存,ip代理 介绍。 异步是什么,爬虫异步的方式。线程,进程,介绍

2.0.1 协程的 async/await 实现 爬虫 单线程 + 异步协程的实现

3.0 基于selenium 模块的 爬虫操作。 selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。

更多...

aid 加一试试->

评论([[comments.sum]])

发表

加载更多([[item.son.length - 2]])...

发表

2020-11 By Hchuan.

flask & bootstrap-flask

© 2021 HChuan. All rights reserved.

随机占位图来自:fghrsh

互联网ICP备案号:蜀ICP备2020031846号