validator
是 Pydantic 模块中提供的一个装饰器,用于为模型中的属性添加自定义验证逻辑。当我们需要对一个属性的值进行特定的验证或转换时,可以使用 validator
装饰器实现。
以下是一个简单的使用示例:
from pydantic import BaseModel, validator
class User(BaseModel):
username: str
password: str
@validator('username')
def username_must_contain_letters(cls, v):
assert any(char.isalpha() for char in v), 'Username must contain letters'
return v.title()
@validator('password')
def password_min_length(cls, v):
assert len(v) >= 8, 'Password must be at least 8 characters long'
return v
这个例子中,我们定义了一个 User
模型,其中包含 username
和 password
两个属性。通过使用 validator
装饰器,我们为这两个属性添加了自定义验证逻辑,分别是:
username_must_contain_letters
: 验证 username
属性的值必须包含至少一个字母,如果不满足条件则抛出异常并提示错误信息。同时,这个验证逻辑会将 username
的值转换为首字母大写的格式。password_min_length
: 验证 password
属性的值长度必须大于等于 8,如果不满足条件则抛出异常并提示错误信息。在实际使用中,我们可以根据需要添加多个自定义的验证逻辑。当模型的属性被改变时,Pydantic 会自动执行相应的验证逻辑,确保模型数据的有效性。
下面这部分与上面有关系,单又不是很密切;
validator
是指在验证输入数据时使用的函数或类。在FastAPI中,可以使用Pydantic模块提供的验证器来定义数据模型并验证输入数据。验证器可以确保输入数据的类型与格式正确,并在必要时自动转换数据类型。这可以有效地减少开发人员的工作量,并提高应用程序的可靠性和健壮性。例如,可以使用validator来验证字符串是否是有效的电子邮件地址或URL,或者验证数字是否在指定范围内。
validator
是 FastAPI 框架中用来进行请求参数验证的工具,它可以用来检查请求参数是否符合定义的规则,从而避免了一些常见的请求参数错误。
下面是一个使用 validator
的示例代码:
from fastapi import FastAPI, Query
app = FastAPI()
@app.get("/items/")
async def read_items(q: str = Query(None, min_length=3, max_length=50, regex="^fixedquery$")):
results = {"items": [{"item_id": "Foo"}, {"item_id": "Bar"}]}
if q:
results.update({"q": q})
return results
在上面的代码中,我们定义了一个 GET 请求路由 /items/
,并且使用 Query
函数来验证请求参数 q
是否符合定义的规则。其中,min_length
和 max_length
参数用来限制参数的长度,regex
参数用来限制参数的格式。
这样,在请求 /items/?q=fixedquery
时,就会返回以下结果:
{
"items": [
{"item_id": "Foo"},
{"item_id": "Bar"}
],
"q": "fixedquery"
}
而请求 /items/?q=query
则会返回以下错误信息:
{
"detail": [
{
"loc": [
"query",
"q"
],
"msg": "ensure this value has at least 3 characters",
"type": "value_error.any_str.min_length",
"ctx": {
"limit_value": 3
}
},
{
"loc": [
"query",
"q"
],
"msg": "string does not match regex '^fixedquery$'",
"type": "value_error",
"ctx": {
"pattern": "^fixedquery$"
}
}
]
}
可以看到,在请求参数不符合规则时,validator
会返回详细的错误信息,以帮助开发者快速定位问题。