在Flask中获取请求有效负载的一致方法

时间:2018-01-16 20:17:38

标签: python curl flask

我有一个接受一些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}'

1 个答案:

答案 0 :(得分:2)

Flask没有提供在一个地方获取解析数据的属性。您应该知道您的视图接受哪些数据并执行所需操作。如果客户希望他们的请求成功,那么客户只能传递视图接受的数据。

enter image description here你可以做类似的事情。

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