Python 通过邮递员和请求向Flask投递会填充不同的请求属性
我正在向我的Flask应用程序和Postman以及请求库发送POST请求。当我使用Postman时,我可以使用Python 通过邮递员和请求向Flask投递会填充不同的请求属性,python,curl,flask,python-requests,postman,Python,Curl,Flask,Python Requests,Postman,我正在向我的Flask应用程序和Postman以及请求库发送POST请求。当我使用Postman时,我可以使用json.loads(request.data)获取数据。当我使用requests或curl时,我可以使用request.form获取数据。为什么用这两个工具发送相同的数据来填充不同的属性?我希望下面的引文能够解释这一点: 数据 调用get_data()和set_data()的描述符。这不应该被使用,并且最终会被弃用 您使用Postman将数据作为JSON发送,使用requests和cu
json.loads(request.data)
获取数据。当我使用requests或curl时,我可以使用request.form
获取数据。为什么用这两个工具发送相同的数据来填充不同的属性?我希望下面的引文能够解释这一点:
数据
调用get_data()和set_data()的描述符。这不应该被使用,并且最终会被弃用
您使用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/json
和application/x-www-form-urlencoded
。如果内容类型为formurlencoded
,则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()
我的问题是,既然
request.form
不起作用,为什么在使用POSTMAN时需要使用request.data
。?我需要保持一致性。我该怎么做?