在web.py中处理表单中的多选下拉框

web.py是 一个轻量级的web framework,源代码只有7000多行(我自己用wc -l计算,肯定偏多了),用它来做个简单的站点很方便,上手容易。我在公司就用web.py做了我们自己的自动化测试管理工具,主要是管理自动化用例,展 示测试结果。最近遇到一个问题,我想做一个多选下拉框,但是等我做完以后发现结果跟我预想的不太一样。

我用的是web.py的web.form.Dropdown类来生成一个多选下拉框。只需在初始化dropdown的时候传一个multiple=”参数就OK了

form.Dropdown(‘adserver_id’, description=’Adserver: ‘, args=ADSERVERS, multiple=”)

这样生成的html就是

<select name="adserver_id" id="adserver_id" multiple="">   <option value="1">Coretest2 - 1</option>   <option value="2">Coretest3 - 1</option>   <option value="3">Coretest4 - 1</option>   <option value="4">Coretest2 - 2</option>   <option value="5">Coretest3 - 2</option>   <option value="6">Coretest4 - 2</option> </select>

不过当我选中多个选项提交表单的时候,我在服务端得到的结果却是最后一个选中的选项,例如我选了Coretest2 – 1和Coretest3 – 1,那么我在服务端拿到的数据就只有Coretest3 – 1。用Firebug抓了一下请求看,原来POST的数据是长这个样子的:

adserver_id: 1
adserver_id: 2

在web.py中,一般是通过web.input()来获取表单提交的数据。而web.input()会把所有提交的数据给storify方法处理 一下(可以更容易的访问dict的数据,例如原来是mydict['name'],可以写成mydict.name),而这个方法默认会把 adserver_id处理成唯一的key,所以无论输入是多少个adserver_id,最终拿到的只有1个。解决方法很简单,用这个方法来获取 post的数据web.input(adserver_id=[]),这样提交adserver_id的多个数据就会被保存到一个列表里面了。

但是这时候会遇到另一个问题,就是如果想要更改这个case的时候,就没有办法在web.py里面用 value=xxx 来指定哪些options是应该被选中的。value=xxx只能指定一个option,怎么办?我是用了JavaScript来解决。思路很简单,就是 页面Load完以后,JavaScript获取一下哪些options应该被选中,然后就选上那些项,OK

pycharm中使用python语言实行,app.py文件中,我创建了,三个函数,连接MYSQL数据库,执行SQL语句,获取相应数据,sql语句如下:SELECT n1,q1,q2,a1,a2,x1 FROM data.list WHERE n1 ='B207A' AND x1=10,然后将这几个数组传递到line1.html界面中,另一个函数中的SQL如下:SELECT n1,q1,q2,a1,a2,x1 FROM data.list WHERE n1 ='B1991' AND x1=20,传递到line2.html界面中:第三个函数中的SQL如下:SELECT n1,q1,q2,a1,a2,x1 FROM data.list WHERE n1 ='B1991' AND x1=10,传递到line3.html界面中,line1,line2和line3界面通过echarts代码创建了一个重折线图,q1q2a1a2作为重折线图的折线数据。x1作为X轴数据, 我现在的需求是,在index.html文件中创建三个下拉项框,第一个下拉项框的内容是数组n1=B207A和B1991,第二个按钮是数组x1的内容:10和20,第三个项框的内容是想要将line1和line2,line3中的echarts中的 legend: { data: ['q1', 'q2', 'a1', 'a2', ] },涉及到的折线名的内容,第二个项框可以同时个折线数据名称,这样当我好想要查看那些具体的折线变化,可以同时项折线名,然后再点击第四个按钮,确认按钮,通过前三个择的不同,跳转到不同的line界面,例如在index.html界面中第一个项框我择了n1=1991,则只可能执行app.py中函数中 WHERE n1 ='B1991'的函数,再通过第二个项框,我择x1=10,则确定下来执行更具体的第三个函数SELECT n1,q1,q2,a1,a2,x1 FROM data.list WHERE n1 ='B1991' AND x1=10,也就是确定跳转到的界面是line3,而第三个择按钮,例如我只择q1q2,那么对应的line3界面中折线数据只有q1q2。通过前两个项的内容n1x1确定具体择哪个函数,和具体跳转到的页面第三个择按钮则确定显示哪些折线数据
最新发布
04-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值