Browse Source

perf: 优化validate_annotation中各装饰器逻辑

master
insistence 7 months ago
parent
commit
ffc932951b
  1. 99
      ruoyi-fastapi-backend/module_admin/annotation/validate_annotation.py

99
ruoyi-fastapi-backend/module_admin/annotation/validate_annotation.py

@ -72,7 +72,7 @@ class ValidateFields:
async def wrapper(*args, **kwargs): async def wrapper(*args, **kwargs):
validate_model = kwargs.get(self.validate_model) validate_model = kwargs.get(self.validate_model)
if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.validate_function): if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.validate_function):
validate_function = getattr(validate_model, self.validate_function, None) validate_function = getattr(validate_model, self.validate_function)
if validate_function is not None and callable(validate_function): if validate_function is not None and callable(validate_function):
validate_function() validate_function()
return await func(*args, **kwargs) return await func(*args, **kwargs)
@ -107,51 +107,52 @@ class NetWork:
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
validate_model = args[0] validate_model = args[0]
if isinstance(validate_model, BaseModel): if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
field_value = getattr(validate_model, self.field_name) field_value = getattr(validate_model, self.field_name)
try: if field_value:
if self.field_type == 'AnyUrl': try:
NetWorkAnnotationModel(any_url=field_value) if self.field_type == 'AnyUrl':
elif self.field_type == 'AnyHttpUrl': NetWorkAnnotationModel(any_url=field_value)
NetWorkAnnotationModel(any_http_url=field_value) elif self.field_type == 'AnyHttpUrl':
elif self.field_type == 'HttpUrl': NetWorkAnnotationModel(any_http_url=field_value)
NetWorkAnnotationModel(http_url=field_value) elif self.field_type == 'HttpUrl':
elif self.field_type == 'AnyWebsocketUrl': NetWorkAnnotationModel(http_url=field_value)
NetWorkAnnotationModel(any_websocket_url=field_value) elif self.field_type == 'AnyWebsocketUrl':
elif self.field_type == 'WebsocketUrl': NetWorkAnnotationModel(any_websocket_url=field_value)
NetWorkAnnotationModel(websocket_url=field_value) elif self.field_type == 'WebsocketUrl':
elif self.field_type == 'FileUrl': NetWorkAnnotationModel(websocket_url=field_value)
NetWorkAnnotationModel(file_url=field_value) elif self.field_type == 'FileUrl':
elif self.field_type == 'FtpUrl': NetWorkAnnotationModel(file_url=field_value)
NetWorkAnnotationModel(ftp_url=field_value) elif self.field_type == 'FtpUrl':
elif self.field_type == 'PostgresDsn': NetWorkAnnotationModel(ftp_url=field_value)
NetWorkAnnotationModel(postgres_dsn=field_value) elif self.field_type == 'PostgresDsn':
elif self.field_type == 'CockroachDsn': NetWorkAnnotationModel(postgres_dsn=field_value)
NetWorkAnnotationModel(cockroach_dsn=field_value) elif self.field_type == 'CockroachDsn':
elif self.field_type == 'AmqpDsn': NetWorkAnnotationModel(cockroach_dsn=field_value)
NetWorkAnnotationModel(amqp_dsn=field_value) elif self.field_type == 'AmqpDsn':
elif self.field_type == 'RedisDsn': NetWorkAnnotationModel(amqp_dsn=field_value)
NetWorkAnnotationModel(redis_dsn=field_value) elif self.field_type == 'RedisDsn':
elif self.field_type == 'MongoDsn': NetWorkAnnotationModel(redis_dsn=field_value)
NetWorkAnnotationModel(mongo_dsn=field_value) elif self.field_type == 'MongoDsn':
elif self.field_type == 'KafkaDsn': NetWorkAnnotationModel(mongo_dsn=field_value)
NetWorkAnnotationModel(kafka_dsn=field_value) elif self.field_type == 'KafkaDsn':
elif self.field_type == 'NatsDsn': NetWorkAnnotationModel(kafka_dsn=field_value)
NetWorkAnnotationModel(nats_dsn=field_value) elif self.field_type == 'NatsDsn':
elif self.field_type == 'MySQLDsn': NetWorkAnnotationModel(nats_dsn=field_value)
NetWorkAnnotationModel(mysql_dsn=field_value) elif self.field_type == 'MySQLDsn':
elif self.field_type == 'MariaDBDsn': NetWorkAnnotationModel(mysql_dsn=field_value)
NetWorkAnnotationModel(mariadb_dsn=field_value) elif self.field_type == 'MariaDBDsn':
elif self.field_type == 'ClickHouseDsn': NetWorkAnnotationModel(mariadb_dsn=field_value)
NetWorkAnnotationModel(clickhouse_dsn=field_value) elif self.field_type == 'ClickHouseDsn':
elif self.field_type == 'EmailStr': NetWorkAnnotationModel(clickhouse_dsn=field_value)
NetWorkAnnotationModel(email_str=field_value) elif self.field_type == 'EmailStr':
elif self.field_type == 'NameEmail': NetWorkAnnotationModel(email_str=field_value)
NetWorkAnnotationModel(name_email=field_value) elif self.field_type == 'NameEmail':
elif self.field_type == 'IPvAnyAddress': NetWorkAnnotationModel(name_email=field_value)
NetWorkAnnotationModel(ipv_any_address=field_value) elif self.field_type == 'IPvAnyAddress':
except (ValidationError, ValueError): NetWorkAnnotationModel(ipv_any_address=field_value)
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不是正确的{self.field_type}类型') except (ValidationError, ValueError):
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不是正确的{self.field_type}类型')
return func(*args, **kwargs) return func(*args, **kwargs)
return wrapper return wrapper
@ -174,7 +175,7 @@ class NotBlank:
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
validate_model = args[0] validate_model = args[0]
if isinstance(validate_model, BaseModel): if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
field_value = getattr(validate_model, self.field_name) field_value = getattr(validate_model, self.field_name)
if field_value is None or field_value == '' or field_value == [] or field_value == () or field_value == {}: 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}不能为空') raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}不能为空')
@ -202,7 +203,7 @@ class Pattern:
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
validate_model = args[0] validate_model = args[0]
if isinstance(validate_model, BaseModel): if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
field_value = getattr(validate_model, self.field_name) field_value = getattr(validate_model, self.field_name)
if isinstance(field_value, str) and not re.match(self.regexp, field_value): if isinstance(field_value, str) and not re.match(self.regexp, field_value):
raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}格式不正确') raise FieldValidatorException(message=self.message if self.message else f'{self.field_name}格式不正确')
@ -242,7 +243,7 @@ class Size:
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
validate_model = args[0] validate_model = args[0]
if isinstance(validate_model, BaseModel): if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
field_value = getattr(validate_model, self.field_name) field_value = getattr(validate_model, self.field_name)
if isinstance(field_value, float): if isinstance(field_value, float):
if self.gt is not None and field_value <= self.gt: if self.gt is not None and field_value <= self.gt:
@ -282,7 +283,7 @@ class Xss:
@wraps(func) @wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
validate_model = args[0] validate_model = args[0]
if isinstance(validate_model, BaseModel): if isinstance(validate_model, BaseModel) and hasattr(validate_model, self.field_name):
field_value = getattr(validate_model, self.field_name) field_value = getattr(validate_model, self.field_name)
if not StringUtil.is_blank(field_value): if not StringUtil.is_blank(field_value):
pattern = re.compile(self.HTML_PATTERN) pattern = re.compile(self.HTML_PATTERN)

Loading…
Cancel
Save