Some practical pydantic validation decorators that support manual invocation.
Project description
pydantic-validation-decorator
支持手动调用的实用的pydantic验证装饰器
简体中文 | 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydantic_validation_decorator-0.1.5.tar.gz.
File metadata
- Download URL: pydantic_validation_decorator-0.1.5.tar.gz
- Upload date:
- Size: 15.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e13818e7e3b9fbf26932cba8f827d47936d516543f11f3ef3ce369c071177d9f
|
|
| MD5 |
cd9a0cfb887af756e9ac84c6ef8878d3
|
|
| BLAKE2b-256 |
d5d027f12f0feb8fee0aa97f8d8c1fda98cb8febc24f8dfb8afc9011f4c99f1d
|
File details
Details for the file pydantic_validation_decorator-0.1.5-py3-none-any.whl.
File metadata
- Download URL: pydantic_validation_decorator-0.1.5-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ebe9433edae1810f70dd18a3f9984a3f4b26b11086565fd2d7456db449170ab6
|
|
| MD5 |
b1c2d5f7e7a41b32d76b36ca87c5a626
|
|
| BLAKE2b-256 |
26c6b4d11908585459be493b91be5d5d76cf58f30895be705eab6291bd8d6a4f
|