insistence
7 months ago
2 changed files with 89 additions and 0 deletions
@ -0,0 +1,79 @@ |
|||
from typing import Optional |
|||
from pydantic import BaseModel |
|||
from exceptions.exception import FieldValidatorException |
|||
|
|||
|
|||
class NotBlank: |
|||
""" |
|||
字段非空校验装饰器 |
|||
""" |
|||
def __init__(self, field_name: str, message: Optional[str] = None): |
|||
""" |
|||
字段非空校验装饰器 |
|||
:param field_name: 需要校验的字段名称 |
|||
:param message: 校验失败的提示信息 |
|||
:return: |
|||
""" |
|||
self.field_name = field_name |
|||
self.message = message |
|||
|
|||
def __call__(self, func): |
|||
def wrapper(*args, **kwargs): |
|||
check_model = args[0] |
|||
if isinstance(check_model, BaseModel): |
|||
field_value = getattr(check_model, self.field_name) |
|||
if field_value is None or field_value == '' or field_value == [] or field_value == () or field_value == {}: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不能为空') |
|||
return func(*args, **kwargs) |
|||
return wrapper |
|||
|
|||
|
|||
class Size: |
|||
""" |
|||
字段大小校验装饰器 |
|||
""" |
|||
def __init__(self, field_name: str, gt: Optional[float] = None, ge: Optional[float] = None, |
|||
lt: Optional[float] = None, le: Optional[float] = None, min_length: Optional[int] = 0, |
|||
max_length: Optional[int] = None, message: Optional[str] = None): |
|||
""" |
|||
字段大小校验装饰器 |
|||
:param field_name: 需要校验的字段名称 |
|||
:param gt: 数字型字段值必须要大于gt |
|||
:param ge: 数字型字段值必须要大于等于ge |
|||
:param lt: 数字型字段值必须要小于ge |
|||
:param le: 数字型字段值必须要小于等于ge |
|||
:param min_length: 字符串型字段长度不能小于min_length |
|||
:param max_length: 字符串型字段长度不能大于max_length |
|||
:param message: 校验失败的提示信息 |
|||
:return: |
|||
""" |
|||
self.field_name = field_name |
|||
self.gt = gt |
|||
self.ge = ge |
|||
self.lt = lt |
|||
self.le = le |
|||
self.min_length = min_length if min_length >= 0 else 0 |
|||
self.max_length = max_length |
|||
self.message = message |
|||
|
|||
def __call__(self, func): |
|||
def wrapper(*args, **kwargs): |
|||
check_model = args[0] |
|||
if isinstance(check_model, BaseModel): |
|||
field_value = getattr(check_model, self.field_name) |
|||
if isinstance(field_value, float): |
|||
if self.gt is not None and field_value <= self.gt: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须大于{self.gt}') |
|||
elif self.ge is not None and field_value < self.ge: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须大于等于{self.ge}') |
|||
elif self.lt is not None and field_value >= self.lt: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须小于{self.lt}') |
|||
elif self.le is not None and field_value > self.le: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}必须小于等于{self.le}') |
|||
elif isinstance(field_value, str): |
|||
if len(field_value) < self.min_length: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}长度不能小于{self.min_length}') |
|||
elif self.max_length is not None and len(field_value) > self.max_length: |
|||
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}长度不能大于{self.max_length}') |
|||
return func(*args, **kwargs) |
|||
return wrapper |
Loading…
Reference in new issue