前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PKW: flask 接收请求参数 + pandas groupby 实用(第 2 期)

PKW: flask 接收请求参数 + pandas groupby 实用(第 2 期)

作者头像
周萝卜
发布2019-07-17 16:02:44
7140
发布2019-07-17 16:02:44
举报
文章被收录于专栏:萝卜大杂烩

这是 Python Knowledge Weekly(PKW)第 2 期。

”有时候就是要经历一些糟糕的事情才能意识到世间存在的美丽。 Sometimes it takes going through something so awful to realize the beauty that is out there in this world.“

点点滴滴,不忘初心。

本周分析知识

一、flask 接收 get 请求参数处理

二、pandas groupby 的简单实用

flask 接收 get 请求参数处理

缘起

在最近的工作中,需要做一些接口测试,在使用 requests 写接口测试用例,因为具体的业务实现还没有搭建好,所以自己就现在本地使用 flask 搭建了一个服务,用来模拟业务的正常请求和相应。然后写完一个接口的正常测试用例后,就用本地的服务来测试下,看看能否调通。

问题

有这么一个 get 接口,http://127.0.0.1/test?schema-name=public,使用 requests 来模拟请求,因为还要兼容 post 类的接口测试,所以这里代码书写如下:

代码语言:javascript
复制
1import requests
2
3url = 'http://127.0.0.1:5000/test/'
4args = {'json': {'schema-name': 'new'}}
5resp_obj = requests.request(url=url, method='GET', **args)
6print(resp_obj.url)
7print(resp_obj)

开始 flask 服务端代码如下:

代码语言:javascript
复制
 1@app.route("/test", methods=['GET', 'POST'])
 2def test():
 3    schemaname = request.args.get('schema-name')
 4    jsonstr = [
 5  {
 6    "name": "test1",
 7    "schema": schemaname,
 8    "type": "TABLE"
 9  },
10  {
11    "name": "test2",
12    "schema": schemaname,
13    "type": "TABLE"
14  }
15]
16
17    print(jsonstr)
18    return jsonify(jsonstr), 200
测试

发现,用浏览器输入 http://127.0.0.1:5000/test?schema-name=public,是可以正常获取到参数的,但是用 requests 发请求,确没法正常接收参数。

改变接收方式

多次尝试未果后,开始尝试通过 get_json() 来接收 requests 的请求

代码语言:javascript
复制
 1@app.route("/test", methods=['GET', 'POST'])
 2def test():
 3    # schemaname = request.args.get('schema-name')
 4    schemaname = request.get_json()['schema-name']
 5    jsonstr = [
 6  {
 7    "name": "test1",
 8    "schema": schemaname,
 9    "type": "TABLE"
10  },
11  {
12    "name": "test2",
13    "schema": schemaname,
14    "type": "TABLE"
15  }
16]
17
18    print(jsonstr)
19    return jsonify(jsonstr), 200

发现可以正常接收 request 的请求了。 总结下来就是,args 只能够接收地址栏中的参数,对于通过 body 传过来的,是无能为力的。

pandas groupby 的简单实用

其实 pandas 的 groupby 是一个非常完善且强大的功能,我这里也只是因为用到了,才简单入门学习了下,其实仅仅使用到了 groupby 之后的数据获取。 我这里的需求是,有如下的数据,我想把“分组”和“英雄名字”两列提取出来,以“分组”列进行分组,然后把同一组的英雄组合到一起,最后用饼图展示。数据格式如下:

最开始的时候,因为对 pandas 不是很熟悉,走了很多弯路,尝试了很多办法都没法实现,然后就到官网上查看 groupby 的用法,看到了如下图的一段例子,感觉还是可以应用到我这个需求当中的,于是就尝试了下,还真的成了。

最后的完整代码如下:

代码语言:javascript
复制
 1df = data[['分组', '英雄名字']]  # 获取需要的两列
 2
 3grouped = df.groupby(['分组'])  # 以”分组“列来进行分组
 4k = []
 5
 6# 获取分组后的 组和值,保存为字典,放到列表中
 7for name, group in grouped:
 8    k.append({name: list(group['英雄名字'].values)})
 9
10kk = []
11for i in k:
12    for k, v in i.items():
13        kk.append(v)
14
15length = []
16key = []
17for i in kk:
18    key.append(str(i))
19    length.append(len(i))
20
21pie = Pie('英雄初始属性分类图', title_pos='center')
22pie.add("", key, length,
23        is_label_show=True, legend_pos="bottom", legend_orient="vertical",)
24pie.render()

其实现在再看看,代码写的还是挺菜的,但是毕竟暂时解决了我的问题,后面可能还是优化下,毕竟保存的分组信息是没有用到的。 也欢迎有兴趣的小伙伴儿来一同优化下啦。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 萝卜大杂烩 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本周分析知识
  • flask 接收 get 请求参数处理
    • 缘起
      • 问题
        • 测试
          • 改变接收方式
          • pandas groupby 的简单实用
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档