zoukankan      html  css  js  c++  java
  • Form 表单提交

    简单方法(1)
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import tornado.ioloop
    import tornado.web
    import re
    class MainForm(object):
        def __init__(self):
            self.host = "(.*)"
            self.ip = "^(25[0-5]|2[0-4]d|[0-1]?d?d)(.(25[0-5]|2[0-4]d|[0-1]?d?d)){3}$"
            self.port = '(d+)'
            self.phone = '^1[3|4|5|8][0-9]d{8}$'
           
    
        def chec_inpu(self,handler):
            exits = True
            inp_dict = {}
            for key,value in self.__dict__.items():
                user_input = handler.get_argument(key)
                res = re.match(value,user_input)
                if not res:
                    exits = False
                inp_dict[key] = user_input
            return exits,inp_dict
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
    
            self.render('index.html')
        def post(self, *args, **kwargs):
            obj = MainForm()
            ret,inp_dict = obj.chec_inpu(self)
            print(ret,inp_dict)
            self.render('index.html')
    
    settings = {
        # 模版路劲配置
        'template_path':'views',
        # 静态路劲配置 如css 和 js
        'static_path':'static',
        #静态文件的前缀
        'static_url_prefix':'/ssss/',
    
    }
    # 路由映射
    application = tornado.web.Application([
        (r"/index", MainHandler),
    ] , **settings)
    
    
    if __name__ == "__main__":
        application.listen(8888)
        tornado.ioloop.IOLoop.instance().start()
    

      

    高级版()
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import tornado.ioloop
    import tornado.web
    import re
    
    class ReHandler(object):
        def __init__(self):
            self.host = "(.*)"
            self.ip = "^(25[0-5]|2[0-4]d|[0-1]?d?d)(.(25[0-5]|2[0-4]d|[0-1]?d?d)){3}$"
            self.port = '(d+)'
            self.phone = '^1[3|4|5|8][0-9]d{8}$'
    
        def rehande(self,ret):
    
            re_dict = {
                'host': "(.*)",
                'ip':"^(25[0-5]|2[0-4]d|[0-1]?d?d)(.(25[0-5]|2[0-4]d|[0-1]?d?d)){3}$",
                'port':"(d+)",
                'phone':"^1[3|4|5|8][0-9]d{8}$",
            }
    
            return  re_dict[ret]
    # 匹配验证
    class ReForm(ReHandler):
    
        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
            # True可以为空  默认不能为空
            self.is_valid = False
            # 用户value
            self.value = None
    
        # 验证
        def validate(self,name,input_value):
            if not self.required:
                print(input_value)
                print('123')
                self.value = input_value
                self.is_valid = True
            else:
                # ru
                if not input_value.strip():
                    if self.error_dict.get('required',None):
                        self.error = self.error_dict.get('required')
                    else:
                        self.error = '%s is required'%name
                else:
                    rets = self.rehande(name)
    
                    ret = re.match(rets,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.get('valid')
                        else:
                              self.error = '%s is valid'%name
    
    #需要验证的input required等于True必须填写
    class HomeHandler(object):
        def __init__(self):
            self.ip = ReForm(required=True,error_dict={'required':'空的不要','valid':'格式错误'})
            self.phone = ReForm(required=True,error_dict={'required':'空的不要','valid':'格式错误'})
            self.host = ReForm(required=False)
            self.port = ReForm(required=False)
    
    class FildHandler(HomeHandler):
    
        def chec_inpu(self,handler):
            exxxx = True
            success_dict_value = {}
            error_dict_value = {}
    
            for  home_key,home_value in  self.__dict__.items():
                user_value = handler.get_argument(home_key,None)
                home_value.validate(home_key,user_value)
                if home_value.is_valid:
                    success_dict_value[home_key] = home_value.value
                else:
                    error_dict_value[home_key] = home_value.error
                    exxxx = False
            return exxxx , success_dict_value ,error_dict_value
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
    
            self.render('index.html',errors={})
        def post(self, *args, **kwargs):
            obj = FildHandler()
            exxxx_obj , success_obj ,error_obj = obj.chec_inpu(self)
            if exxxx_obj:
                self.write('成功')
                print(success_obj)
            else:
                self.render('index.html',errors = error_obj)
    
    settings = {
        # 模版路劲配置
        'template_path':'views',
        # 静态路劲配置 如css 和 js
        'static_path':'static',
        #静态文件的前缀
        'static_url_prefix':'/ssss/',
    
    }
    # 路由映射
    application = tornado.web.Application([
        (r"/index", MainHandler),
    ] , **settings)
    
    
    if __name__ == "__main__":
        application.listen(8888)
        tornado.ioloop.IOLoop.instance().start()
    

      

    HTML
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form method="post" action="/index">
            <input type="text" placeholder="host" name="host">{{ errors.get('host',"")}}
            <input type="text" placeholder="ip" name="ip">{{ errors.get('ip',"")}}
            <input type="text" placeholder="port" name="port">{{ errors.get('port',"")}}
            <input type="text" placeholder="phone" name="phone">{{ errors.get('phone',"")}}
            <input type="submit" placeholder="提交">
        </form>
    </body>
    </html>
    

      

    文件提交
    
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    import tornado.ioloop
    import tornado.web
    import re
    # 封装错误指令 和正则匹配
    class ReHandler(object):
        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
            # True可以为空  默认不能为空
            self.is_valid = False
            # 用户value
            self.value = None
        def rehande(self,ret):
            re_dict = {
                'host': "(.*)",
                'ip':"^(25[0-5]|2[0-4]d|[0-1]?d?d)(.(25[0-5]|2[0-4]d|[0-1]?d?d)){3}$",
                'port':"(d+)",
                'phone':"^1[3|4|5|8][0-9]d{8}$",
                'fileinfo':"^(w+.pdf)|(w+.mp3)|(w+.py)$",
            }
            return  re_dict[ret]
    
    # 普通input匹配验证
    class ReForm(ReHandler):
        def validate(self,name,input_value):
            if self.required:
                # 如果用户输入是空的
                if not input_value.strip():
                    if self.error_dict.get('required',None):
                        self.error = self.error_dict.get('required')
                    else:
                        self.error = '%s is required'%name
                # 如果不是空的
                else:
                    rets = self.rehande(name)
                    ret = re.match(rets,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.get('valid')
                        else:
                              self.error = '%s is valid'%name
            else:
                self.value = input_value
                self.is_valid = True
    
    # 文件匹配验证
    class FileForm(ReHandler):
        def filedata(self,re_file,file_name,file_info):
            if self.required:
                ret_neme = self.rehande(re_file)
                ret = re.match(ret_neme,file_name)
                    # 判断文件名 是否正确
                if ret:
                    self.is_valid = True
                    with open(file_name,'wb') as e:
                       e.write(file_info)
                       e.close()
                else:
                      self.is_valid = False
                      if self.error_dict.get('valid',None):
                          self.error = self.error_dict.get('valid')
                      else:
                          self.error = ' 文件的格式错误了'
    
            else:
                # 如果上传判断 文件格式
                if file_name.strip():
                    ret_neme = self.rehande(re_file)
                    ret = re.match(ret_neme,file_name)
                    if ret:
                        self.is_valid = True
                        with open(file_name,'wb') as e:
                           e.write(file_info)
                           e.close()
                    else:
                        if self.error_dict.get('valid',None):
                            self.error = self.error_dict.get('valid',None)
                        else:
                            self.error = '文件格式错误'
                # 如果没有上传默True
                else:
                    self.value = file_info
                    self.is_valid = True
    
    #需要验证的 类型 等于True必须填写
    class HomeHandler(object):
        def __init__(self):
            self.ip = ReForm(required=True,error_dict={'required':'空的不要','valid':'格式错误'})
            self.phone = ReForm(required=True,error_dict={'required':'空的不要','valid':'格式错误'})
            self.host = ReForm(required=False)
            self.port = ReForm(required=False)
            self.fileinfo = FileForm(required=True,error_dict={'required':'空的不要','valid':'格式错误'})
    
    class FildHandler(HomeHandler):
        def chec_inpu(self,handler):
            exxxx = True
            success_dict_value = {}
            error_dict_value = {}
            for  home_key,home_value in  self.__dict__.items():
                # input类型
                if type(home_value) == ReForm:
                    user_value = handler.get_argument(home_key,None)
                    home_value.validate(home_key,user_value)
                    if home_value.is_valid:
                        success_dict_value[home_key] = home_value.value
                    else:
                        error_dict_value[home_key] = home_value.error
                        exxxx = False
                # file类型
                elif type(home_value) == FileForm:
                    user_file = handler.request.files.get(home_key,[])
                    print(len(user_file))
                    for i in user_file:
                        file_name = i['filename']
                        file_body = i['body']
                        home_value.filedata(home_key,file_name,file_body)
                        if home_value.is_valid:
                            success_dict_value[file_name] = file_body
                        else:
                            error_dict_value[home_key] =  home_value.error
    
    
            return exxxx , success_dict_value ,error_dict_value
    
    class MainHandler(tornado.web.RequestHandler):
        def get(self):
            self.render('index.html',errors={})
        def post(self, *args, **kwargs):
    
            obj = FildHandler()
            exxxx_obj , success_obj ,error_obj = obj.chec_inpu(self)
            if exxxx_obj:
                self.write('成功')
                print(success_obj)
            else:
                print(error_obj)
                self.render('index.html',errors = error_obj)
    
    settings = {
        # 模版路劲配置
        'template_path':'views',
        # 静态路劲配置 如css 和 js
        'static_path':'static',
        #静态文件的前缀
        'static_url_prefix':'/ssss/',
    
    }
    # 路由映射
    application = tornado.web.Application([
        (r"/index", MainHandler),
    ] , **settings)
    
    
    if __name__ == "__main__":
        application.listen(8888)
        tornado.ioloop.IOLoop.instance().start()
    

      

    HTML
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <form method="post" action="/index" enctype="multipart/form-data">
    
            <input type="text" placeholder="host" name="host">{{ errors.get('host',"")}}
            <input type="text" placeholder="ip" name="ip">{{ errors.get('ip',"")}}
            <input type="text" placeholder="port" name="port">{{ errors.get('port',"")}}
            <input type="text" placeholder="phone" name="phone">{{ errors.get('phone',"")}}
            <p>
            <input type="file" name="fileinfo"/>
                {{ errors.get('fileinfo',"")}}
            
            </p>
            <input type="submit" placeholder="提交">
        </form>
    </body>
    </html>
    

      

  • 相关阅读:
    Boxes and Candies(贪心)
    Gone Fishing(贪心)
    Gaby Ivanushka(快排)
    Stacks of Flapjacks(栈)
    Robbery(记忆化搜索)
    PILE读书笔记_基础知识
    2. Add Two Numbers【medium】
    160. Intersection of Two Linked Lists【easy】
    92. Reverse Linked List II【Medium】
    206. Reverse Linked List【easy】
  • 原文地址:https://www.cnblogs.com/cloniu/p/6388102.html
Copyright © 2011-2022 走看看