使用 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 强制执行路径约束的主要内容,如果未能解决你的问题,请参考以下文章

FastApi学习 Pydantic 做类型强制检查

使用 SqlBulkCopy 时未(始终)强制执行约束

FastAPI Web框架 [1.12]

FastAPI Web框架 [1.12]

如何通过 Java 在 SQLite 中强制执行外键约束?

FastAPI 学习之路路径参数和数值的校验