import re from Utils.ErrorUtil import AttrCheckError 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): """对象属性值检查""" def __init__(self, **kwargs): self.kwargs = kwargs self.error_info = kwargs['error_info'] if 'error_info' in kwargs else None def __get__(self, instance, owner): if self.kwargs['field'] in instance.__dict__: return instance.__dict__[self.kwargs['field']] def __set__(self, instance, value): if not self.error_info: if instance.fields_map.__contains__(self.kwargs['field']): info_template = '赋值异常: {}; 请检查: {} 是否填写正确;' self.error_info = info_template.format( self.kwargs['field'], instance.fields_map[self.kwargs['field']] ) if 'type' in self.kwargs: """检查实例的属性类型""" if type(self.kwargs['type']) is list: if value is not None and type(value) not in self.kwargs['type']: raise AttrCheckError(self.error_info) elif value is None and 'default' not in self.kwargs: raise AttrCheckError(self.error_info) else: if not isinstance(value, self.kwargs['type']): if value is not None: raise AttrCheckError(self.error_info) elif value is None and 'default' not in self.kwargs: raise AttrCheckError(self.error_info) if 'length' in self.kwargs: """检查实例的属性值长度(一般是str类型)""" if len(value) != self.kwargs['length']: raise AttrCheckError(self.error_info) if 'in_list' in self.kwargs: """检查实例属性是否包含于列表中(属性有列表和非列表两种情况)""" if type(value) is not list: if value not in self.kwargs['in_list']: raise AttrCheckError(self.error_info) else: for item in value: if item not in self.kwargs['in_list']: raise AttrCheckError(self.error_info) if 'instance_list' in self.kwargs: """检查实例列表""" if type(value) is not list: raise AttrCheckError(self.error_info) else: for item in value: if not isinstance(item, self.kwargs['instance_list']): raise AttrCheckError(self.error_info) if 'func' in self.kwargs: """属性检查函数""" if not list(map(self.kwargs['func'], [value]))[0]: raise AttrCheckError(self.error_info) if 'default' in self.kwargs: """实例属性默认值""" if value is None: value = self.kwargs['default'] instance.__dict__[self.kwargs['field']] = value