我想能够获得数据发送到我的Flask应用程序。我已经尝试访问请求。数据,但它是一个空字符串。如何访问请求数据?

from flask import request

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    data = request.data  # data is empty
    # need posted data here

这个问题的答案让我问在Python Flask中获取原始POST体,而不管接下来的Content-Type头,这是关于获取原始数据而不是解析数据。


当前回答

要获得原始数据,请使用request.data。这只在它不能被解析为表单数据的情况下才有效,否则它将是空的和请求的。表单将有解析过的数据。

from flask import request
request.data

其他回答

在使用HTML表单发布表单数据时,请确保输入标记具有name属性,否则它们将不会出现在request.form中。

@app.route('/', methods=['GET', 'POST'])
def index():
    print(request.form)
    return """
<form method="post">
    <input type="text">
    <input type="text" id="txt2">
    <input type="text" name="txt3" id="txt3">  
    <input type="submit">
</form>
"""
ImmutableMultiDict([('txt3', 'text 3')])

只有txt3输入有名称,所以它是request.form中唯一的键。

对于URL查询参数,使用request.args。

search = request.args.get("search")
page = request.args.get("page")

对于发布的表单输入,使用request.form。

email = request.form.get('email')
password = request.form.get('password')

对于内容类型为application/ JSON的JSON,使用request.get_json()。

data = request.get_json()

使用request.get_json()获取发布的JSON数据。

data = request.get_json()
name = data.get('name', '')

使用请求。当使用POST方法提交表单时,表单可以获取数据。

name = request.form.get('name', '')

使用请求。args获取URL查询字符串中传递的数据,就像使用get方法提交表单时一样。

request.args.get("name", "")

请求。Form等是dict-like的,如果没有传递,使用get方法来获得一个默认值。

@app.route('/addData', methods=['POST'])
def add_data():
     data_in = mongo.db.Data
     id = request.values.get("id")
     name = request.values.get("name")
     newuser = {'id' : id, 'name' : name}
     if voter.find({'id' : id, 'name' : name}).count() > 0:
            return "Data Exists"
     else:
            data_in.insert(newuser)
            return "Data Added"

如果你用内容类型application/ JSON发布JSON,使用request.get_json()在Flask中获取它。如果内容类型不正确,则返回None。如果数据不是JSON,则会引发错误。

@app.route("/something", methods=["POST"])
def do_something():
    data = request.get_json()