当flask服务器端开启了一个api接口服务后,客户端常常使用request.post传递数据去调用api,如下所示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import requests
post_data = {
"text": ["abcdefg", "defaa", "ghisx"]
}
res = requests.post(url="http://127.0.0.1:5000/analyse", data=post_data)
print(res.text)
客户端封装了key为”text“,value为["abcdefg", "defaa", "ghisx"]的数据post给服务器。
服务器使用request.form获取客户端传递的post数据,然后调用get(“text”)获取post数据中key为text的值,如下所示:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route('/analyse', methods=['post'])
def analyse():
data = request.form
text_list = data.get("text")
print(text_list, len(text_list))
return ""
if __name__ == "__main__":
app.run()
然而输出结果,仅仅只有传递的数据中的第一项,而且获取的也不是列表的长度,而是第一项字符串的长度:
abcdefg 7
其实我们把data打印出来就能发现客户端直接传来的数据是ImmutableMultiDict格式的。
ImmutableMultiDict([('text', 'abcdefg'), ('text', 'defaa'), ('text', 'ghisx')])
此时,需要使用getlist方法读取,如下所示:
text_list = data.getlist("text")
输出结果为:
['abcdefg', 'defaa', 'ghisx'] 3
可见通过这个方式,服务器端正确地获得了客户端post的数据。