PKW: flask 接收请求参数 + pandas groupby 实用(第 2 期)
这是 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 类的接口测试,所以这里代码书写如下:
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 服务端代码如下:
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 的请求
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 的用法,看到了如下图的一段例子,感觉还是可以应用到我这个需求当中的,于是就尝试了下,还真的成了。
最后的完整代码如下:
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()
其实现在再看看,代码写的还是挺菜的,但是毕竟暂时解决了我的问题,后面可能还是优化下,毕竟保存的分组信息是没有用到的。 也欢迎有兴趣的小伙伴儿来一同优化下啦。
- "开门待客"还是“送货上门”?
- 同步一个数据库要发多少个数据包?
- BP神经网络识别性别
- 为or、in平反——or、in到底能不能利用索引?
- BP神经网络续1
- 隐藏在程序旮旯中的“安全问题”
- SQLSERVER 占了500多M内存,原来的程序无法一次查询出50多W数据了,记录下这个问题的解决过程。
- 能自己“跑”的表单控件,思路,雏形,源码。vs2005版本
- 在SQLMAP中使用动态SQL
- 使用OQL“语言”构造ORM实体类的复杂查询条件
- AdoHelper使用MySQL存储过程示例
- 使用8位字节的编码格式将字节流安全的转换成String
- 同样的SQL语句在查询分析器执行很快,但是网站上执行超时的诡异问题
- PDF.NET数据开发框架操作MySQL实体类操作实例
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux 基础之定时任务
- Git库迁移步骤(从服务器A迁移至服务器B)
- springboot源码解析(四)
- 第2天:网易2018年校园招聘NLP算法工程师笔试试卷分析(二)
- Windows下Scoop安装、配置与使用
- Flutter免费iOS真机调试 AndroidStudio iPhone真机运行教程
- Flutter GridView 网格控件
- Flutter ListView 下拉刷新,上拉加载更多
- Flutter问题:import 'package:english_words/english_words.dart'失败
- 第17天:NLP实战(一)——爬取语料及其简单分析
- 搞懂 Redis 缓存穿透、击穿、雪崩
- win10_opencv4.2_cuda11_vs2019 编译
- (Demo分享)利用JavaScript(JS)做一个可输入分钟的倒计时钟功能
- Flutter ListView 列表控件
- 第18天:NLP实战(二)——用DNN实现手势识别