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 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 ('{}异常'.format(kwargs['mark']) if 'mark' in kwargs else None) self.error_code = kwargs['error_code'] if 'error_code' in kwargs else 200 def __get__(self, instance, owner): if self.kwargs['field'] in instance.__dict__: return instance.__dict__[self.kwargs['field']] def __set__(self, instance, value): """""" try: self.error_info = '{}异常'.format(instance.fields_map[self.kwargs['field']]) except AttributeError: pass def not_default(): """无默认值时属性设值检查""" if 'type' in self.kwargs: """检查实例的属性类型""" if type(self.kwargs['type']) is list: if type(value) not in self.kwargs['type']: raise ReturnConditionCheckFailed(self.error_info, self.error_code) else: if not isinstance(value, self.kwargs['type']): raise ReturnConditionCheckFailed(self.error_info, self.error_code) if 'length' in self.kwargs: """检查实例的属性值长度(一般是str类型)""" if len(value) != self.kwargs['length']: raise ReturnConditionCheckFailed(self.error_info, self.error_code) if 'in_list' in self.kwargs: """检查实例属性是否包含于列表中(属性有列表和非列表两种情况)""" if type(value) is not list: if value not in self.kwargs['in_list']: raise ReturnConditionCheckFailed(self.error_info, self.error_code) else: for item in value: if item not in self.kwargs['in_list']: raise ReturnConditionCheckFailed(self.error_info, self.error_code) if 'instance_list' in self.kwargs: """检查实例列表""" if type(value) is not list: raise ReturnConditionCheckFailed(self.error_info, self.error_code) else: for item in value: if not isinstance(item, self.kwargs['instance_list']): raise ReturnConditionCheckFailed(self.error_info, self.error_code) if 'func' in self.kwargs: """属性检查函数""" if not list(map(self.kwargs['func'], [value]))[0]: raise ReturnConditionCheckFailed(self.error_info, self.error_code) instance.__dict__[self.kwargs['field']] = value if 'default' in self.kwargs: """实例属性默认值""" if value is None: value = self.kwargs['default'] instance.__dict__[self.kwargs['field']] = value else: not_default() else: not_default()