如何在FastAPI中替换Pydantic的constr以在BaseModel外使用?
我正在用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
文档中提到,你应该用 Annotated
和 StringConstraints
来替代 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