使用 Postman 与请求发布到 Flask 填充不同的请求属性

Posted

技术标签:

【中文标题】使用 Postman 与请求发布到 Flask 填充不同的请求属性【英文标题】:Posting to Flask with Postman versus requests populates different request attributes 【发布时间】:2015-07-20 13:59:11 【问题描述】:

我正在使用 Postman 以及 requests 库向我的 Flask 应用程序发送 POST 请求。当我使用 Postman 时,我可以使用json.loads(request.data) 获取数据。当我使用 requests 或 curl 时,我可以使用request.form 获取数据。为什么使用填充不同属性的两个工具发送相同的数据?

【问题讨论】:

【参考方案1】:

您使用 Postman 将数据作为 JSON 发送,并且使用 requests 和 curl 将其作为表单数据发送。您可以告诉任一程序按照您的期望发送数据,而不是让它使用其“默认值”。例如,您可以发送带有请求的 JSON:

import requests
requests.post('http://example.com/', json='hello': 'world')

另外请注意,您可以直接从 Flask 请求中获取 JSON,而无需自己加载:

from flask import request
data = request.get_json()

request.data 保存请求的主体,无论它可能是什么格式。常见的类型是application/jsonapplication/x-www-form-urlencoded。如果内容类型为form-urlencoded,则request.form 将填充解析的数据。如果是json,则request.get_json() 将改为访问它。


如果您真的不确定是以表单还是 JSON 格式获取数据,您可以编写一个简短的函数来尝试使用其中一个,如果不起作用,请使用另一个。

def form_or_json():
    data = request.get_json(silent=True)
    return data if data is not None else request.form

# in a view
data = form_or_json()

【讨论】:

【参考方案2】:

我希望http://werkzeug.pocoo.org/docs/0.10/wrappers/#werkzeug.wrappers.Request 的这句话能解释它:

数据 调用 get_data() 和 set_data() 的描述符。这不应该被使用,最终会被弃用。

【讨论】:

我的问题是为什么我在使用 POSTMAN 时需要使用request.data,因为request.form 不起作用。?我需要保持一致性。我该怎么做?

以上是关于使用 Postman 与请求发布到 Flask 填充不同的请求属性的主要内容,如果未能解决你的问题,请参考以下文章

6postman cookie和token使用

6postman cookie和token使用

postman并发

Axios 数据在发送到 Flask POST 路由时以 ImmutableMultiDict([]) 的形式出现,但与 Postman 一起使用

postman 接口循环调用

postman发送post请求,报405 Method Not Allowed