使用 fastapi 强制执行路径约束
Posted
技术标签:
【中文标题】使用 fastapi 强制执行路径约束【英文标题】:enforce path contraints with fastapi 【发布时间】:2021-12-09 12:22:38 【问题描述】:在快速 api 中使用正则表达式路径约束时出现错误。
ValueError: On field "serial" the following field constraints are set but not enforced: regex.
For more details see https://pydantic-docs.helpmanual.io/usage/schema/#unenforced-field-constraints
函数签名如下所示。
@devices.get("/serial", response_model=Device)
async def get_serial(serial: int = Path(..., regex=r"(?:\d18|\d24)")) -> dict:
错误将我指向 pydantic 文档,但我不明白出了什么问题。我相信他们所建议的正是 fastapi 应该在幕后做的事情。
https://pydantic-docs.helpmanual.io/usage/schema/#unenforced-field-constraints
【问题讨论】:
【参考方案1】:由于您将字段限制为int
,因此您不能将regex
约束应用于该字段。而是将字段定义为str
,并且可以根据需要应用正则表达式:
async def get_serial(serial: str = Path(..., regex=r"(?:\d18|\d24)")) -> dict:
这是因为 int
约束优先于 regex
约束,并且是错误试图传达的内容。
【讨论】:
以上是关于使用 fastapi 强制执行路径约束的主要内容,如果未能解决你的问题,请参考以下文章