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