如何配置Pydantic在FastAPI接口中返回十六进制颜色?
解决方案
要让Pydantic序列化Color字段时返回十六进制格式而非命名颜色,有两种简洁的实现方式:
方法一:通过模型Config配置JSON编码器
直接在MyModel中添加Config类,指定Color类型的序列化逻辑:
from pydantic import BaseModel from pydantic.color import Color class MyModel(BaseModel): color: Color class Config: # 自定义Color类型的JSON序列化规则 json_encoders = { Color: lambda color: color.hex() }
Color对象自带的hex()方法会返回带#前缀的十六进制字符串(例如#000000),如果需要强制小写/大写格式,可以改用color.hex_l()(小写)或color.hex_u()(大写)。
方法二:自定义Color字段(进阶场景)
如果需要全局统一处理Color的序列化,可自定义一个继承自Color的字段类,重写其序列化方法:
from pydantic import BaseModel from pydantic.color import Color class HexColor(Color): def __json__(self, *args, **kwargs) -> str: return self.hex() class MyModel(BaseModel): color: HexColor
这种方式适合需要在多个模型中复用相同序列化规则的场景。
验证效果
配置完成后,FastAPI返回的响应会自动将Color字段转为十六进制格式,例如:
{ "color": "#000000" }
内容的提问来源于stack exchange,提问作者ChabErch
相关产品推荐
相关产品推荐

