这里是陈哥给我安排的任务。
项目环境
- MACbook
- python3.7
- flask
项目需求
想要实现将数据库的数据生成xls文件,并且可以下载。
postman的用法
这个项目的请求是通过 postman 来发送请求的,有两个蛮有意思的地方。
存储cookie
这个项目有点就是需要先登录,如果不登陆的话就会访问不了其它页面。
经过测试,postman有存储cookie的功能,也就是登上去之后,能和浏览器一样保存用户的登录信息或者说是cookie。
登录的请求时 post,其传参方式如下图:
这里尤为注意的是 post 请求填写参数的位置在 body 的 form-data 中,而不是 params。
当传参成功后,我们的postman就有了用户的cookie。
利用postman下载
如果要利用 postman 下载的话,就要将右侧的 send 切换到 send and download。
代码书写
技巧寻找数据的自身BUG
将 sql 文件进行注入完成后。
进入 mysql 环境后,然后直接输入 sql 的所在文件位置就好了
mysql> ~/test.sql
其中,我们需要用 postman 访问(当然,在访问这个之前,要先用postman登录)
http://127.0.0.1:5000/eosvoter/v1/vote/statistics
这个访问的 url 调用的是下面的方法
1 |
|
但是,返回的为 500。
经过很长时间的排查后,发现原来是忘了传参数了
bp_name = request.args.get('bp_name')
上面的那句话的意思是根据url的bp_name获取数据,由于没有导致出现服务器500的错误,所以,修改url为
http://127.0.0.1:5000/eosvoter/v1/vote/statistics?bp_name=atticlabeosb
传入这个后,发现返回的是数据为空,也就是没有ret。
我们追踪
ret, data = voteService.get_vote_statistics_by_bps(current_user.user_name)
中的get_vote_statistics_by_bps方法
进入到下面的代码(截取了部分):
1 | 代码没有截全,只是部分 |
其中比较重要的是
vote_bps = vote_obj.get_vote_statistics_by_bp(bp_name, period)
然后继续跟踪
get_vote_statistics_by_bp
进入到下面的代码:
1 | def get_vote_statistics_by_bp(self, from_bp, period): |
发现这句话出了带 from_bp 的参数外,还携带 period。
然后,我们输出了一下传递的period,发现为空,所以,这个数值应该是网络获取的,不过,就目前来说,我们测试开发要写死。
调用数据库得知,这个period是25或者26。所以,我取了25,上面的那句话就变成了:
vote_bps = vote_obj.get_vote_statistics_by_bp(bp_name, period=25)
这里还有一点需要注意的是,下面还有一句话也需要写死period,要不然就会使得数据返回不全,这个数据不全的问题,浪费我一天的时间,才找到原因。
到了现在才解决数据回传的所有问题,那么下面就是开发生成xls了(现实中的流程并不是这样的,我是先做完生成xls的,然后处理回传数据,最后根据回传数据填入xls,因为一开始我根本不知道回传数据的问题出现在哪里)
另外,还有一点需要说明的是
http://127.0.0.1:5000/eosvoter/v1/vote/statistics?bp_name=atticlabeosb
这个网址传递的参数,也就是 bp_name ,必须要在 t_account的数据库表中存在,要不然不能返回数据,具体那里需要写死我没找到,我也不想找了。。。
生成 xls
这一章节,我想进行两步,一个是生成xls,另一个是向xls中填写数据。
说实话,被文档坑了一下。。。