Post 为什么我的烧瓶请求对象总是空的?

Post 为什么我的烧瓶请求对象总是空的?,post,flask,python-requests,Post,Flask,Python Requests,我正在创建一个愚蠢的端点,它只记录发布的数据 @app.route("/add_foo", methods=['POST']) def add_foo(): logger.debug(request.data) print(request.args.get('foo')) return "Success" 然后,我尝试将数据发布到此端点: >>> import requests >>> r = requests.post("http:

我正在创建一个愚蠢的端点,它只记录发布的数据

@app.route("/add_foo", methods=['POST'])
def add_foo():
    logger.debug(request.data)
    print(request.args.get('foo'))
    return "Success"
然后,我尝试将数据发布到此端点:

>>> import requests
>>> r = requests.post("http://127.0.0.1:8080/add_foo", data={'foo': 'foobar'})
我看到以下输出:

 * Running on http://127.0.0.1:8080/ (Press CTRL+C to quit)
2016-07-28 08:59:22,432 - __main__ - DEBUG - b''
None
127.0.0.1 - - [28/Jul/2016 08:59:22] "POST /add_foo HTTP/1.1" 200 -
有趣的是,当我通过curl发布数据时,我看到了同样的情况。下面是我的curl命令:

curl -XPOST -d "{'foo': 'foobar'}" "http://localhost:8080/add_foo"

发布的数据有什么问题?

请求。args
访问URL查询参数,即URL中的参数,在
之后。您正在将值发布到请求正文中,因此请改用
request.form

从烧瓶中的快速启动:

要访问表单数据(POST或PUT请求中传输的数据),可以使用
表单
属性

[……]

要访问URL中提交的参数(
?key=value
),可以使用
args
属性[。]


您还可以使用,它将来自
request.args
request.form
对象的数据组合在一起<代码>参数在
表单
之前搜索
request.data
也仅捕获这些查询参数?@erip:
request.data
是未分析的原始主体
request.form
是解析到字典中的数据,前提是您有一个具有正确内容类型的请求(
application/x-www-form-urlencoded
multipart/form data
)。我可能认为原始正文是非空的,尤其是在未解析的情况下。我可以确认使用
request.form
有效,但是我仍然发现
request.data
有点模糊。@erip:来自:注意,如果表单数据已经被解析,此方法将不会返回任何内容,因为表单数据解析不会像此方法那样缓存数据。@erip:为了效率起见,表单数据解析不会保留请求正文,因为它可能会被忽略确实非常大(想想文件上传)。