tfse-app-api-v0.2/Utils/ValidateUtil.py

125 lines
4.5 KiB
Python
Raw Normal View History

2022-04-06 04:30:30 +08:00
import re
from Utils.ErrorUtil import ReturnConditionCheckFailed
class Validate(object):
2022-04-24 17:07:36 +08:00
"""常用格式检查"""
2022-04-06 04:30:30 +08:00
@staticmethod
def email(param):
2022-04-24 17:07:36 +08:00
"""邮箱格式"""
2022-04-06 04:30:30 +08:00
regex = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"
case = (len(param) > 7) and (re.match(regex, param) is not None)
result = True if case else False
return result
@staticmethod
def password(param):
2022-04-24 17:07:36 +08:00
"""密码格式"""
2022-04-06 04:30:30 +08:00
regex = "^(?![A-Za-z0-9]+$)(?![a-z0-9\\W]+$)(?![A-Za-z\\W]+$)(?![A-Z0-9\\W]+$)^.{8,}$"
case = (len(param) >= 8) and (re.match(regex, param) is not None)
return True if case else False
2022-04-26 17:04:09 +08:00
@staticmethod
def telephone(param):
"""手机号格式"""
regex = "(^(13[0-9]|14[01456879]|15[0-3,5-9]|16[2567]|17[0-8]|18[0-9]|19[0-3,5-9])d{8}$)"
case = re.match(regex, param) is not None
return True if case else False
2022-04-22 10:28:59 +08:00
@staticmethod
def date_format(param):
"""yyyy-mm-dd"""
regex = "\d{4}-\d{1,2}-\d{1,2}"
case = re.match(regex, param) is not None
return True if case else False
@staticmethod
def time_format(param):
"""yyyy-mm-dd hh:mm:ss"""
regex = "\d{4}-\d{1,2}-\d{1,2} \d{1,2}:\d{1,2}:\d{1,2}"
case = re.match(regex, param) is not None
return True if case else False
2022-04-07 11:19:29 +08:00
@staticmethod
def image(param):
2022-04-24 17:07:36 +08:00
"""图片格式"""
2022-04-07 11:19:29 +08:00
mimetype = param.mimetype
return True if mimetype in ['image/jpeg', 'image/png'] else False
2022-04-06 04:30:30 +08:00
class ValidateAttr(object):
2022-04-24 17:07:36 +08:00
"""对象属性值检查"""
FIELD_ERROR_INFO = '字段【{}】异常'
FILED_MAP_ERROR = '字段未映射完整'
2022-04-11 10:42:46 +08:00
2022-04-06 04:30:30 +08:00
def __init__(self, **kwargs):
self.kwargs = kwargs
2022-04-25 17:02:34 +08:00
2022-04-24 17:07:36 +08:00
self.code = kwargs['error_code'] if 'error_code' in kwargs else 200
2022-04-06 04:30:30 +08:00
2022-04-25 17:02:34 +08:00
if 'error_info' in kwargs:
self.info = kwargs['error_info']
elif 'mark' in kwargs:
self.info = self.FIELD_ERROR_INFO.format(kwargs['mark'])
else:
self.info = None
2022-04-06 04:30:30 +08:00
def __get__(self, instance, owner):
if self.kwargs['field'] in instance.__dict__:
return instance.__dict__[self.kwargs['field']]
def __set__(self, instance, value):
2022-04-11 15:51:42 +08:00
try:
2022-04-24 17:07:36 +08:00
if not self.info:
self.info = self.FIELD_ERROR_INFO.format(instance.fields_map[self.kwargs['field']])
2022-04-11 15:51:42 +08:00
except AttributeError:
2022-04-24 17:07:36 +08:00
raise ReturnConditionCheckFailed(self.FILED_MAP_ERROR, 200)
if 'type' in self.kwargs:
"""检查实例的属性类型"""
if type(self.kwargs['type']) is list:
if type(value) not in self.kwargs['type']:
raise ReturnConditionCheckFailed(self.info, self.code)
else:
if not isinstance(value, self.kwargs['type']):
2022-04-25 17:02:34 +08:00
if value is not None and 'default' not in self.kwargs:
raise ReturnConditionCheckFailed(self.info, self.code)
2022-04-24 17:07:36 +08:00
if 'length' in self.kwargs:
"""检查实例的属性值长度(一般是str类型)"""
if len(value) != self.kwargs['length']:
raise ReturnConditionCheckFailed(self.info, self.code)
if 'in_list' in self.kwargs:
"""检查实例属性是否包含于列表中(属性有列表和非列表两种情况)"""
if type(value) is not list:
if value not in self.kwargs['in_list']:
raise ReturnConditionCheckFailed(self.info, self.code)
else:
for item in value:
if item not in self.kwargs['in_list']:
raise ReturnConditionCheckFailed(self.info, self.code)
if 'instance_list' in self.kwargs:
"""检查实例列表"""
if type(value) is not list:
raise ReturnConditionCheckFailed(self.info, self.code)
else:
for item in value:
if not isinstance(item, self.kwargs['instance_list']):
raise ReturnConditionCheckFailed(self.info, self.code)
if 'func' in self.kwargs:
"""属性检查函数"""
if not list(map(self.kwargs['func'], [value]))[0]:
raise ReturnConditionCheckFailed(self.info, self.code)
if 'default' in self.kwargs:
2022-04-11 15:51:42 +08:00
"""实例属性默认值"""
if value is None:
value = self.kwargs['default']
2022-04-24 17:07:36 +08:00
instance.__dict__[self.kwargs['field']] = value