我有一个接受一些POST数据的Flask视图。我可以使用curl将数据发布为表单编码或JSON。无论客户发布哪种方式,我如何获取数据?
from flask import request
@app.route('/', methods=['GET', 'POST'])
def refresh():
# empty when posted as JSON
print(request.form)
# empty when posted as form-encoded
print(request.data)
return 'Hello, World!'
curl -XPOST -H "Content-Type: application/json" 'http://127.0.0.1:5000/?thing1=1' -d '{"thing2":2}'
curl -XPOST 'http://127.0.0.1:5000/?thing1=1' -d '{"thing2":2}'
curl -XGET 'http://127.0.0.1:5000/?thing1=1' -d '{"thing2":2}'
答案 0 :(得分:2)
Flask没有提供在一个地方获取解析数据的属性。您应该知道您的视图接受哪些数据并执行所需操作。如果客户希望他们的请求成功,那么客户只能传递视图接受的数据。
from werkzeug.datastructures import CombinedMultiDict, ImmutableMultiDict
def form_or_json():
if request.method == 'POST':
if request.files:
return CombinedMultiDict((request.files, request.form))
elif request.form:
return request.form
elif request.get_json():
return ImmutableMultiDict(request.get_json())
# in a view
data = form_or_json()
如果您想获取原始数据,而不进行Flask处理,请使用request.get_data()
。通常不需要这样做,您应该让Flask处理表单或JSON数据。