各个字段类,含正则和验证方法
#字段类 class IPField: REGULAR = "^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}" def __init__(self,error_dict=None,required=True): self.error_dict={} if error_dict: self.error_dict.update(error_dict) self.required=required self.error=None self.is_valid=False self.value=None def validate(self,name,input_value): if not self.required: #允许为空 if input_value.strip(): ret = re.match(IPField.REGULAR, input_value) if ret: self.is_valid = True self.value = ret.group() else: if self.error_dict.get('valid', None): self.error = self.error_dict['valid'] else: self.error = "%s is invalid" % name else: self.is_valid = True self.value=input_value else: #不允许为空 if not input_value.strip(): if self.error_dict.get('required',None): self.error=self.error_dict['required'] else: self.error="%s is required"%name else: ret = re.match(IPField.REGULAR,input_value) if ret: self.is_valid=True self.value=ret.group() else: if self.error_dict.get('valid',None): self.error=self.error_dict['valid'] else: self.error="%s is invalid"%name #可以含有多个文件名 class FileField: REGULAR = "^(\w\.pdf)|(\w\.mp3)|(\w\.py)$" def __init__(self,error_dict=None,required=True): self.error=None self.success_file_name_list={} self.value=None self.is_valid=True#后面只要有一个错误,就是错 self.required=required self.error_dict={} if error_dict: self.error_dict.update(error_dict) def validate(self,name,all_file_name_list):#all_file_name_list所有文件文件名 if not self.required: # if not input_value.strip(): # ret=re.match(FileField.REGULAR,input_value) # if ret: # self.is_valid=True # self.value=input_value # else: # if self.error_dict.get('valid',None): # self.error=self.error_dict['valid'] # else: # self.error="%s is invalid"%name # else: # self.is_valid=True # self.value=input_value if not all_file_name_list: self.is_valid=True else: #循环匹配所有 for input_value in all_file_name_list: ret = re.match(FileField.REGULAR, input_value) if ret: self.success_file_name_list.append(input_value) else: self.is_valid=False if self.error_dict.get('valid', None): self.error = self.error_dict['valid'] else: self.error = "%s is invalid" % name break else: if not all_file_name_list: self.is_valid=False if self.error_dict.get('required',None): self.error=self.error_dict['required'] else: self.error="%s is required"%name else: #循环匹配所有 for input_value in all_file_name_list: ret = re.match(FileField.REGULAR, input_value) if ret: self.success_file_name_list.append(input_value) else: self.is_valid=False if self.error_dict.get('valid', None): self.error = self.error_dict['valid'] else: self.error = "%s is invalid" % name break #字符串验证 class StringField: REGULAR = "(.*)" def __init__(self,error_dict=None,required=True): self.is_valid=False self.value=None self.error=None self.error_dict={} if error_dict: self.error_dict.update(error_dict) self.required=required def validate(self,name,input_value): if not self.required: #允许为空 if input_value.strip(): ret = re.match(StringField.REGULAR,input_value) if ret: self.is_valid=True self.value=input_value else: if self.error_dict.get('valid',None): self.error=self.error_dict['valid'] else: self.error="%s is invalid"%name else: self.is_valid=True self.value=input_value else:#不允许为空 if not input_value.strip(): if self.error_dict.get('required',None): self.error=self.error_dict['required'] else: self.error="%s is required"%name else: ret=re.match(StringField,input_value) if ret: self.is_valid=True self.value=input_value else: if self.error_dict.get('valid',None): self.error=self.error_dict['valid'] else: self.error="%s is invalid"%name #复选框验证 class CheckBoxField: def __init__(self,required=True,error_dict=None): self.is_valid=False self.error=None self.required=required if error_dict: self.error_dict=error_dict self.value=None def validate(self,name,input_value): #用户表单输入的数据可以为空 if not self.required: self.is_valid=True self.value=input_value else: if not input_value: if self.error_dict.get('required',None): self.error=self.error_dict['required'] else: self.error="%s is required"%name else: self.is_valid=True self.value=input_value