Skip to main content

Some practical pydantic validation decorators that support manual invocation.

Project description

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 字段验证装饰器

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

@Alpha 字段字母验证装饰器

参数名称 类型 参数说明 默认值
field_name str 需要验证的字段名称 -
mode Literal['upper', 'lower', 'mixed'], optional 验证模式。可选项:'upper'(仅大写字母)、'lower'(仅小写字母)、'mixed'(大小写混合) 'mixed'
message str, optional 验证失败提示消息 '{field_name} must contain only letters.' OR '{field_name} must contain only uppercase letters.' OR '{field_name} must contain only lowercase letters.'

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

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

@NotBlank 字段非空验证装饰器

参数名称 类型 参数说明 默认值
field_name str 需要验证的字段名称 -
allow_unset bool, optional 如果为True,仅当可选字段被显式提供时才运行验证 False
message str, optional 验证失败提示消息 '{field_name} cannot be empty.'

@Pattern 字段正则验证装饰器

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

@Size 字段大小验证装饰器

参数名称 类型 参数说明 默认值
field_name str 需要验证的字段名称 -
gt float or int, optional 数字型字段值必须要大于gt -
ge float or int, optional 数字型字段值必须要大于等于ge -
lt float or int, optional 数字型字段值必须要小于lt -
le float or int, optional 数字型字段值必须要小于等于le -
min_length int, optional 字符串型字段长度不能小于min_length 0
max_length int, optional 字符串型字段长度不能大于max_length -
message str, 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_name str 需要验证的字段名称 -
message str, 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-dev.txt

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydantic_validation_decorator-0.1.5.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydantic_validation_decorator-0.1.5-py3-none-any.whl (21.6 kB view details)

Uploaded Python 3

File details

Details for the file pydantic_validation_decorator-0.1.5.tar.gz.

File metadata

File hashes

Hashes for pydantic_validation_decorator-0.1.5.tar.gz
Algorithm Hash digest
SHA256 e13818e7e3b9fbf26932cba8f827d47936d516543f11f3ef3ce369c071177d9f
MD5 cd9a0cfb887af756e9ac84c6ef8878d3
BLAKE2b-256 d5d027f12f0feb8fee0aa97f8d8c1fda98cb8febc24f8dfb8afc9011f4c99f1d

See more details on using hashes here.

File details

Details for the file pydantic_validation_decorator-0.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for pydantic_validation_decorator-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 ebe9433edae1810f70dd18a3f9984a3f4b26b11086565fd2d7456db449170ab6
MD5 b1c2d5f7e7a41b32d76b36ca87c5a626
BLAKE2b-256 26c6b4d11908585459be493b91be5d5d76cf58f30895be705eab6291bd8d6a4f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page