You're Invited:Meet the Socket Team at BlackHat and DEF CON in Las Vegas, Aug 4-6.RSVP
Socket
Book a DemoInstallSign in
Socket

pydantic-validation-decorator

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pydantic-validation-decorator

Some practical pydantic validation decorators that support manual invocation.

0.1.4
pipPyPI
Maintainers
1

pydantic-validation-decorator

支持手动调用的实用的pydantic验证装饰器

GitHub PyPI

简体中文 | English

目录

安装
开始使用
已有装饰器列表
参与贡献

安装

pip install pydantic-validation-decorator -U

开始使用

1.创建一个Pydantic模型

from pydantic import BaseModel
from typing import Optional


class NotBlankTestModel(BaseModel):
    user_name: Optional[str] = None

2.在Pydantic模型中引入验证装饰器,以@NotBlank装饰器为例

from pydantic import BaseModel
from typing import Optional
from pydantic_validation_decorator import NotBlank


class NotBlankTestModel(BaseModel):
    user_name: Optional[str] = None

    @NotBlank(
        field_name='user_name',
        message='user_name cannot be blank',
    )
    def get_user_name(self):
        return self.user_name

    def validate_fields(self):
        self.get_user_name()

3.在需要手动触发校验的函数中使用@ValidateFields验证装饰器

from pydantic_validation_decorator import ValidateFields


@ValidateFields(validate_model='not_blank_test', validate_function='validate_fields')
def test_not_blank_decorator(not_blank_test: NotBlankTestModel):
    return not_blank_test.model_dump()

4.调用这个函数即可触发校验,当校验不通过时,会抛出FieldValidationError异常,异常对象中包含message属性,值为@NotBlank装饰器中设置的message属性。

from pydantic_validation_decorator import FieldValidationError


if __name__ == '__main__':
    not_blank_test = NotBlankTestModel()
    try:
        print(test_not_blank_decorator(not_blank_test=not_blank_test))
    except FieldValidationError as e:
        print(e.__dict__)

调用这个函数最后的输出结果为:

{'model_name': 'NotBlankTestModel', 'field_name': 'user_name', 'field_value': None, 'validator': 'NotBlank', 'message': 'user_name cannot be blank'}

完整的代码示例为:

from pydantic_validation_decorator import (
    ValidateFields,
    NotBlank,
    FieldValidationError,
)
from pydantic import BaseModel
from typing import Optional


class NotBlankTestModel(BaseModel):
    user_name: Optional[str] = None

    @NotBlank(
        field_name='user_name',
        message='user_name cannot be blank',
    )
    def get_user_name(self):
        return self.user_name

    def validate_fields(self):
        self.get_user_name()


@ValidateFields(validate_model='not_blank_test', validate_function='validate_fields')
def test_not_blank_decorator(not_blank_test: NotBlankTestModel):
    return not_blank_test.model_dump()


if __name__ == '__main__':
    not_blank_test = NotBlankTestModel()
    try:
        print(test_not_blank_decorator(not_blank_test=not_blank_test))
    except FieldValidationError as e:
        print(e.__dict__)

已有装饰器列表

@ValidateFields 字段验证装饰器

参数名称类型参数说明默认值
modestr, optional如何获得需要验证的模型。可选的有'args'(从位置参数中获取)和'kwargs'(从关键字参数中获取)'kwargs'
validate_modelstr, optional需要在函数中验证的Pydantic模型的名称(从关键字参数中获取)-
validate_model_indexint, optional需要在函数中验证的Pydantic模型的索引(从位置参数中获取)-
validate_functionstr, optionalPydantic模型中定义的验证函数的名称'validate_fields'

@Network 字段网络类型验证装饰器

参数名称类型参数说明默认值
field_namestr需要验证的字段名称-
field_typestr需要验证的字段类型,可选的有'AnyUrl', 'AnyHttpUrl', 'HttpUrl', 'AnyWebsocketUrl', 'WebsocketUrl', 'FileUrl', 'FtpUrl', 'PostgresDsn', 'CockroachDsn', 'AmqpDsn', 'RedisDsn', 'MongoDsn', 'KafkaDsn', 'NatsDsn', 'MySQLDsn', 'MariaDBDsn', 'ClickHouseDsn', 'EmailStr', 'NameEmail', 'IPvAnyAddress',-
messagestr, optional验证失败提示消息'{field_name} is not the correct {field_type} type.'

@NotBlank 字段非空验证装饰器

参数名称类型参数说明默认值
field_namestr需要验证的字段名称-
messagestr, optional验证失败提示消息'{field_name} cannot be empty.'

@Pattern 字段正则验证装饰器

参数名称类型参数说明默认值
field_namestr需要验证的字段名称-
regexpstr正则表达式-
messagestr, optional验证失败提示消息'The format of {field_name} is incorrect.'

@Size 字段大小验证装饰器

参数名称类型参数说明默认值
field_namestr需要验证的字段名称-
gtfloat or int, optional数字型字段值必须要大于gt-
gefloat or int, optional数字型字段值必须要大于等于ge-
ltfloat or int, optional数字型字段值必须要小于lt-
lefloat or int, optional数字型字段值必须要小于等于le-
min_lengthint, optional字符串型字段长度不能小于min_length0
max_lengthint, optional字符串型字段长度不能大于max_length-
messagestr, optional验证失败提示消息'{field_name} must be greater than {gt}.' OR '{field_name} must be greater than or equal to {ge}.' OR '{field_name} must be less than {lt}.' OR '{field_name} must be less than or equal to {le}.' OR 'The length of {field_name} cannot be less than {min_length}.' OR 'The length of {field_name} cannot be greater than {max_length}.'

@Xss 字段Xss验证装饰器

参数名称类型参数说明默认值
field_namestr需要验证的字段名称-
messagestr, optional验证失败提示消息'{field_name} cannot contain script characters.'

参与贡献

git clone https://github.com/insistence/pydantic-validation-decorator.git
cd pydantic-validation-decorator
# 安装开发环境所需依赖
pip install -r requirements.txt

FAQs

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts