解决flask中request.form获取列表数据缺失的问题

当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的数据。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章