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>

  

时间: 2025-01-04 07:45:41

Form 表单提交的相关文章

ajax传递数组、form表单提交对象数组

在JSP页面开发中,我们常常会用到form表单做数据提交,由于以前一直只是使用form表单提交单个对象,只要表单文本域的name值和接收的对象的属性名一致,那么传值就没有什么问题.不过,在前几天的开发任务中,遇到了需要批量传递对象,也就是需要传递对象数组,在此做个总结.今天又遇到需要向后台传递数组,便一并写下来吧. 1.ajax传递普通数组 前台代码 var deleteNum= [];//定义要传递的数组 deleteNum.push("1"); deleteNum.push(&qu

ajax form表单提交 input file中的文件

ajax form表单提交 input file中的文件 现今的主流浏览器由于ajax提交form表单无法把文件类型数据提交到后台,供后台处理,可是开发中由于某些原因又不得不用ajax提交文件, 为了解决这个问题我走了不少弯路: 1.用原生的 input file , 不支持ajax上传文件,你肯定会说可以用 ajax form表单上传了呀?不过我后面还要调用上传成功后用js处理一些对话框,所以这种方法排除 2.用了 uploadify 上传插件,弄出来能上传东西,结果不理想:因为不能判断上传的

Jquery form表单提交

起因 由于项目中原先提交from是通过JavaScript指定action,在submit提交的,使用的方式,也不是很标准,造成除了ie之外的浏览器都不能正常的提交数据,做web项目还是要考虑到浏览器的兼容性的. 1.序列化form,通过Ajax提交 $.ajax({ cache: false, type: "POST", url: "readImage.do", data: $('#ff').serialize(), //序列化表单数据 async: true,

form表单提交转为ajax方式提交

在做项目的过程中遇到要将form表单提交转为ajax方式提交,下面是我总结的如何把form表单提交无缝转为ajax方式提交的方法. 原先的form表单长这样: <form action="xxx" method="get"> //action的值是请求的url地址 <div class="form-group"> <label for="name">姓名</label> <

Linux curl 模拟form表单提交信息和文件

curl是一个命令行方式下传输数据的开源传输工具,支持多种协议:FTP.HTTP.HTTPS.IMAP.POP3.TELNET等,功能超级强大. 我今天想说的是程序开发中常用的模拟Form提交 1.GET提交 特别简单直接写url里面 2.POST提交    通过 --data/-d 方式指定使用POST方式传递数据 3.模拟form表单提交文件  --form/-F 模拟form表单提交文件 这个命令超级好用,再也不用为了写上传接口,而被迫写一个Form表单了 "[email protecte

form表单提交

1.form表单提交.html页面失败 <%--客户端form--%> <form id="form2" action="LoginOne.html" method="post"> <div> 用户名: <input type="text" name="username" value="admin" /> <input type=&q

jQuery Form 表单提交插件-----formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的 应用

一.jQuery Form的其他api  1.  formSerialize 将表单序列化成查询串.这个方法将返回一个形如: name1=value1&name2=value2的字符串.是否可以连环调用: 否, 这个方法返回的是一个字符串. 例子: var queryString = $('#myFormId').formSerialize(); // the data could now be submitted using $.get, $.post, $.ajax, etc $.post(

form表单提交踩坑记

今天收获了一次集团故障,心塞不已,究其原因,是form表单提交时web服务器对大小做了限制.这个必现的问题在测试阶段也不知为啥没测出来,项目太紧张,赶出来的东西果然质量没有保证. pc端和H5是两套逻辑.pc端直接提交的file,在webx中设置了单个文件不超过2M,总的不超过6M.刚提测不久,就提了bug,传大文件时服务端返回不正确.经过检查,发现在文件超过3M的时候服务端返回403.诡异的是,应用中并没有返回这个错误响应,打断点也总是不中.度娘后才发现,这是nginx报的错,咨询PE,把ng

jqueryEasyUI form表单提交的一个困惑

今天用到了jqueryEasyUI的form表单做一个增加操作的提交,想打开调试(用的是火狐)看看传的参数,但是怎么也看不到form表单提交的http请求?而且还会发送一个另外的请求! 在页面加载时,会首先初始化一个datagrid,然后可以选择是否选择添加操作.另外发送的这个请求,就是这个datagrid想后台请求数据的请求.就相当与重新刷新了datagrid. datagrid请求数据库数据的操作写在$(function(){})里面,后来想想,是不是这个原因,jqueryEasyUI的fo

extjs中form表单提交成功、失败的响应信息

类Ext.form.Action.Submit 处理表单Form数据和返回的response对象的类. 该类的实例仅在表单Form{@link Ext.form.BasicForm#submit 提交}的时候创建. 返回的数据包必须包含一个 boolean 类型的success属性,还有可选地,一个含有无效字段的错误信息的属性 A response packet may contain: ·        success property : Boolean - required. ·