From cfa68999a90129d9da4f1897c996fd9f44a75074 Mon Sep 17 00:00:00 2001 From: insistence <3055204202@qq.com> Date: Wed, 3 Jul 2024 21:08:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E@NotBlank=E5=92=8C@Si?= =?UTF-8?q?ze=E8=A3=85=E9=A5=B0=E5=99=A8=E7=94=A8=E4=BA=8E=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-fastapi-backend/exceptions/exception.py | 10 +++ .../annotation/check_annotation.py | 79 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py diff --git a/ruoyi-fastapi-backend/exceptions/exception.py b/ruoyi-fastapi-backend/exceptions/exception.py index 28c39a6..281bb64 100644 --- a/ruoyi-fastapi-backend/exceptions/exception.py +++ b/ruoyi-fastapi-backend/exceptions/exception.py @@ -36,3 +36,13 @@ class ModelValidatorException(Exception): def __init__(self, data: str = None, message: str = None): self.data = data self.message = message + + +class FieldValidatorException(Exception): + """ + 自定义字段校验异常FieldValidatorException + """ + + def __init__(self, data: str = None, message: str = None): + self.data = data + self.message = message diff --git a/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py b/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py new file mode 100644 index 0000000..005d91d --- /dev/null +++ b/ruoyi-fastapi-backend/module_admin/annotation/check_annotation.py @@ -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