我想能够获得数据发送到我的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

这很好用,但请记住,它是作为字符串传入的,需要遍历。

其他回答

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

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

原始数据作为request.stream从WSGI服务器传递到Flask应用程序。流的长度在Content-Length报头中。

length = request.headers["Content-Length"]
data = request.stream.read(length)

通常使用request.get_data()更安全。

下面是一个解析发布的JSON数据并将其回显的示例。

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/foo', methods=['POST']) 
def foo():
    data = request.json
    return jsonify(data)

使用curl发布JSON:

curl -i -H "Content-Type: application/json" -X POST -d '{"userId":"1", "username": "fizz bizz"}' http://localhost:5000/foo

或者使用Postman:

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

request.data

这很好用,但请记住,它是作为字符串传入的,需要遍历。