固定字符串或任何有效整数的 FastAPI 路径参数验证
FastAPI path parameter validation for a fixed string or any valid integer
我需要从 FastAPI 端点的 URL 路径解析 version
参数。 version
参数的有效值是固定字符串,例如active
或任何整数,例如1
.
是否有一种优雅的方法可以让 FastAPI
或 pydantic
使用此类规则验证此路径参数,以便我不必手动执行验证?
@app.get("/{version}")
def endpoint(version):
# version could be either 'active' or valid integer e.g. 1
return {"version": version}
你要做的(有两种类型的选择)是 Union。
示例:
from typing import Union
from pydantic import BaseModel
class Version(BaseModel):
version: Union[int, str]
警告! Union 尝试将参数类型与 Union 的给定顺序相匹配,并在第一次匹配时停止,即在下面的示例中,它将首先尝试找到一个 INT,然后再找到一个 STR。在某些情况下,这非常重要。
然后是想要有一个固定值的事实。这是文字。
因此,Union 和 Literal 一起给出:
from typing import Union, Literal
from pydantic import BaseModel
class Version(BaseModel):
version: Union[Literal['active'], int]
我需要从 FastAPI 端点的 URL 路径解析 version
参数。 version
参数的有效值是固定字符串,例如active
或任何整数,例如1
.
是否有一种优雅的方法可以让 FastAPI
或 pydantic
使用此类规则验证此路径参数,以便我不必手动执行验证?
@app.get("/{version}")
def endpoint(version):
# version could be either 'active' or valid integer e.g. 1
return {"version": version}
你要做的(有两种类型的选择)是 Union。
示例:
from typing import Union
from pydantic import BaseModel
class Version(BaseModel):
version: Union[int, str]
警告! Union 尝试将参数类型与 Union 的给定顺序相匹配,并在第一次匹配时停止,即在下面的示例中,它将首先尝试找到一个 INT,然后再找到一个 STR。在某些情况下,这非常重要。
然后是想要有一个固定值的事实。这是文字。
因此,Union 和 Literal 一起给出:
from typing import Union, Literal
from pydantic import BaseModel
class Version(BaseModel):
version: Union[Literal['active'], int]