import re from Utils.ErrorUtil import ReturnConditionCheckFailed class Validate(object): """常用格式检查""" @staticmethod def email(param): """邮箱格式""" 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): """密码格式""" 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 @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 @staticmethod def year_format(param): """yyyy年""" regex = "\d{4}年" case = re.match(regex, param) is not None return True if case else False @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 @staticmethod def image(param): """图片格式""" mimetype = param.mimetype return True if mimetype in ['image/jpeg', 'image/png'] else False class ValidateAttr(object): """对象属性值检查""" FIELD_ERROR_INFO = '字段【{}】异常' FILED_MAP_ERROR = '字段未映射完整' def __init__(self, **kwargs): self.kwargs = kwargs self.code = kwargs['error_code'] if 'error_code' in kwargs else 202 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 def __get__(self, instance, owner): if self.kwargs['field'] in instance.__dict__: return instance.__dict__[self.kwargs['field']] def __set__(self, instance, value): try: if not self.info: if instance.fields_map.__contains__(self.kwargs['field']): self.info = self.FIELD_ERROR_INFO.format(instance.fields_map[self.kwargs['field']]) except AttributeError: raise ReturnConditionCheckFailed(self.FILED_MAP_ERROR, self.code) 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']): if value is not None and 'default' not in self.kwargs: raise ReturnConditionCheckFailed(self.info, self.code) 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: """实例属性默认值""" if value is None: value = self.kwargs['default'] instance.__dict__[self.kwargs['field']] = value