覆盖FastAPI中jsonable_encode的默认编码器 [英] override default encoders for jsonable_encoder in FastAPI

查看:0
本文介绍了覆盖FastAPI中jsonable_encode的默认编码器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的代码类似于使用Fast API

class EnumTestT(Enum):
    test_t_value = 0

object = { 
    test: test_t_value
}

enum_mapping = {
    test_t_value: "Test"
}

def enum_encoder(val: EnumTestT) -> str:
    return enum_mapping[val]

custom_encoder = {
    EnumTestT: enum_encoder
}

@app.get("/test")
async def test_get():
    return jsonable_encoder(object, custom_encoder=custom_encoder)

问题是jsonable_encoder在默认设置后应用自定义编码器。有没有办法在默认编码器之前应用它们。因为对于Enum和任何派生类,将报告枚举值而不是映射值。

推荐答案

FastAPI使用ENCODERS_BY_TYPE(来自pydanti.json)对一些基本数据类型进行编码。

ENCODERS_BY_TYPE: Dict[Type[Any], Callable[[Any], Any]] = {
    bytes: lambda o: o.decode(),
    Color: str,
    datetime.date: isoformat,
    datetime.datetime: isoformat,
    datetime.time: isoformat,
    datetime.timedelta: lambda td: td.total_seconds(),
    Decimal: decimal_encoder,
    Enum: lambda o: o.value,

所以我要覆盖默认的日期时间编码,就像

 ENCODERS_BY_TYPE[datetime] = lambda date_obj: date_obj.strftime("%Y-%m-%d %H:%M:%S")

这篇关于覆盖FastAPI中jsonable_encode的默认编码器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆