我想能够获得数据发送到我的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头,这是关于获取原始数据而不是解析数据。


当前回答

@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"

其他回答

如果主体被识别为表单数据,则它将在request.form中。如果它是JSON,它将在request.get_json()中。否则原始数据将在request.data中。如果您不确定数据将如何提交,您可以使用or链来获得第一个有数据的链。

def get_request_data():
    return (
        request.args
        or request.form
        or request.get_json(force=True, silent=True)
        or request.data
    )

请求。Args包含从查询字符串中解析出来的参数,而不管主体中有什么,所以如果它和主体同时需要数据,那么您将从get_request_data()中删除它。

使用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方法来获得一个默认值。

要解析JSON,使用request.get_json()。

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

下面是一个发送表单数据以向数据库添加用户的示例。检查请求。method == "POST"检查表单是否已提交。根据要求使用钥匙。表单来获取表单数据。否则,使用<form>呈现HTML模板。表单中的字段应该具有与request.form中的键相匹配的name属性。

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/user/add", methods=["GET", "POST"])
def add_user():
    if request.method == "POST":
        user = User(
            username=request.form["username"],
            email=request.form["email"],
        )
        db.session.add(user)
        db.session.commit()
        return redirect(url_for("index"))

    return render_template("add_user.html")
<form method="post">
    <label for="username">Username</label>
    <input type="text" name="username" id="username">
    <label for="email">Email</label>
    <input type="email" name="email" id="email">
    <input type="submit">
</form>

您可以从

请求。表单数据,包括表单和文件数据, 请求。Json和请求。get_json用于JSON数据 请求。头对头 请求。参数来获取查询参数

它们都像字典,使用请求。Form ['name']如果你知道这个键存在,或者request.form.get('name')如果它是可选的。