• python---自定义字段验证


    各个字段类,含正则和验证方法

    #字段类
    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
    View Code

    验证类基类

    #form验证基类
    class BaseForm(object):
    
        def check_valid(self,handler):
            flag=True
            error_message_dict={}
            success_dict={}
            for key,regular in self.__dict__.items():
                #用户输入值
                if type(regular) == CheckBoxField:
                    input_val=handler.get_arguments(key)
                elif type(regular)==FileField:
                    #包含上传多个文件[{'body':'','filename':''},{'body':'','filename':''}]
                    file_list=handler.request.files.get(key)
                    #获取其中的文件名
                    input_val=[]
                    for item in file_list:
                        input_val.append(item['filename'])
                else:
                    input_val=handler.get_argument(key)
    
                regular.validate(key,input_val)
                if regular.is_valid:
                    success_dict[key]=regular.value
                else:
                    flag=False
                    error_message_dict[key]=regular.error
    
            return flag,success_dict,error_message_dict

    具体验证类子类:

    #form验证类,采用对象
    class HomeForm(BaseForm):
        def __init__(self):
            self.ip = IPField(required=True,error_dict={'required':'数据不为空',"valid":"验证出错"})
            self.host=StringField(required=True,error_dict={'required':"主机名必须存在","valid":"这都会出错"})
            self.sex=CheckBoxField(required=True,error_dict={'required':'复选框必须选择'})
            # self.file=FileField(required=True,error_dict={'valid':'文件格式不正确'})

    其他业务:

    #采用HomeForm验证类
    class HomeHandler(tornado.web.RequestHandler):
        def get(self):
            self.render('home.html',error_dict=None)
    
        def post(self, *args, **kwargs):
            formCk = HomeForm()
            is_valid,success_dict,error_dict=formCk.check_valid(self)
            if is_valid:
                print(success_dict)
                self.write("ok")
            else:
                print(error_dict)
                self.render('home.html',error_dict=error_dict)
    settings={
        'static_path':'statics',
        'template_path':'views',
    }
    
    application=tornado.web.Application([
        (r"/index",IndexHandler),
        (r"/home",HomeHandler),
    ],**settings)
    
    
    if __name__ == "__main__":
        application.listen(8080)
        tornado.ioloop.IOLoop.instance().start()

    前端代码:

        <form method="post" action="/home">
            <input type="text" placeholder="主机" name="host"/>
            <input type="text" placeholder="IP" name="ip">
            <input type="checkbox" name="sex" value="1"/><input type="checkbox" name="sex" value="2"/><input type="file" name="file">
            <input type="file" name="file">
            <span>
                {% if error_dict and 'ip' in error_dict %}
                        {{error_dict['ip']}}
                {% end %}
                {% if error_dict and 'host' in error_dict %}
                        {{error_dict['host']}}
                {% end %}
            </span>
            <input type="submit" value="提交"/>
        </form>
    View Code
  • 相关阅读:
    python js(JavaScript)初识
    python css盒子型 浮动
    12、液化
    11、高斯模糊—晶格化
    10、形状工具—渐变图标
    9、形状工具—雪糕
    8、形状工具—制作简单立体效果
    7、形状工具
    6、自由变换—再复制功能
    第三章-17、消息聊天界面
  • 原文地址:https://www.cnblogs.com/ssyfj/p/8552915.html
Copyright © 2020-2023  润新知