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

  • 本文收录于《Python开发》专栏,此专栏聚焦于Python开发中的编程技巧和总结,将持续更新,欢迎大家订阅!
  • 个人主页:有梦想的程序星空
  • 个人介绍:小编是人工智能领域硕士,全栈工程师,深耕Flask后端开发、数据挖掘、NLP、Android开发、自动化等领域,有较丰富的软件系统、人工智能算法服务的研究和开发经验。
  • 如果文章对你有帮助,欢迎关注点赞收藏订阅。

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

附录:

request的参数介绍

参数

含义

method

获取访问方式,如get、post

url

获取url地址

cookies

获取cookies

path

获取访问路径

args

获取解析后的请求链接中的参数(Get)

form

获取解析后的提交的表单中的参数

data

获取body元数据

json

获取解析后的body数据

headers

获取头的元数据

remote_addr

获取客户端地址

关注微信公众号【有梦想的程序星空】,了解软件系统和人工智能算法领域的前沿知识,让我们一起学习、一起进步吧!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的程序星空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值