解決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的數據。

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