如何在FastAPI中替换Pydantic的constr以在BaseModel外使用?

1 投票
1 回答
38 浏览
提问于 2025-04-13 18:02

我正在用FastAPI和Pydantic做一个项目,在这个项目中,我使用了constr来验证字符串。这对确保字符串输入符合特定要求,比如长度和格式,特别有帮助,直接在路由函数的参数中就能做到。

在这里输入图片描述

下面是我使用它的一个例子:

from pydantic import constr
from fastapi import FastAPI, HTTPException

SiteCode = constr(strict=True, to_upper=True, max_length=4)

app = FastAPI()

@app.get("/{site_code}", summary="Read a site")
async def get_site(site_code: SiteCode) -> str:
    return "..."

不过,我发现constr已经被弃用了,我在寻找一个现代的替代方案,能够符合Pydantic和FastAPI当前的最佳实践。我的目标是保持对直接传递给路由函数的参数进行同样级别的验证(例如,严格验证、转为大写、最大长度限制),而不仅仅是在Pydantic模型中进行验证。

1 个回答

2

文档中提到,你应该用 AnnotatedStringConstraints 来替代 constr

SiteCode = Annotated[str, StringConstraints(strict=True, to_upper=True, max_length=4)]

@app.get("/{site_code}", summary="Read a site")
async def get_site(site_code: SiteCode) -> str:
    return site_code

https://docs.pydantic.dev/2.6/api/types/#pydantic.types.constr

撰写回答