PythonPydantic validator 与Fastapi 中validator使用功能介绍

Posted 魔都吴所谓

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PythonPydantic validator 与Fastapi 中validator使用功能介绍相关的知识,希望对你有一定的参考价值。

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 模型,其中包含 usernamepassword 两个属性。通过使用 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_lengthmax_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 会返回详细的错误信息,以帮助开发者快速定位问题。

java注解@Valid@Validated表单验证

1.分组验证,参数太多不想一一分组

分组的类继承package javax.validation.groups 下的Default

 

分组验证遇到的坑

2.@Valid和@Validated的区分

@Validated是@Valid 的一次封装,是Spring提供的校验机制使用。

@Valid不提供分组功能

@Validated不提供嵌套验证功能。嵌套验证需要在对应的嵌套属性前加@Valid

 

@Valid和@Validated的总结区分

https://blog.csdn.net/gaojp008/article/details/80583301

https://www.cnblogs.com/guchunchao/p/9860337.html

https://blog.csdn.net/qq_27680317/article/details/79970590

 

3.验证注解

限制说明
@Null 限制只能为null
@NotNull 限制必须不为null
@AssertFalse 限制必须为false
@AssertTrue 限制必须为true
@DecimalMax(value) 限制必须为一个不大于指定值的数字
@DecimalMin(value) 限制必须为一个不小于指定值的数字
@Digits(integer,fraction) 限制必须为一个小数,且整数部分的位数不能超过integer,小数部分的位数不能超过fraction
@Future 限制必须是一个将来的日期
@Max(value) 限制必须为一个不大于指定值的数字
@Min(value) 限制必须为一个不小于指定值的数字
@Past 限制必须是一个过去的日期
@Pattern(value) 限制必须符合指定的正则表达式
@Size(max,min) 限制字符长度必须在min到max之间
@Past 验证注解的元素值(日期类型)比当前时间早
@NotEmpty 验证注解的元素值不为null且不为空(字符串长度不为0、集合大小不为0)
@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0),不同于@NotEmpty,@NotBlank只应用于字符串且在比较时会去除字符串的空格
@Email 验证注解的元素值是Email,也可以通过正则表达式和flag指定自定义的email格式

 

详细链接

https://www.wandouip.com/t5i91334/

以上是关于PythonPydantic validator 与Fastapi 中validator使用功能介绍的主要内容,如果未能解决你的问题,请参考以下文章

@Validated和@Valid校验

java注解@Valid@Validated表单验证

@Valid 和 @Validated 注解用法详解

@Valid和@Validated的总结区分(转)

Spring Boot @Validation @Valid

validation.xml 之后的 validate() 方法