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


当前回答

试试- >

from flask import request

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    if request.method == 'POST':
       data = request.form.get('data')

其他回答

无论内容类型如何,使用request.get_data()获取原始的文章正文。如果你使用request。data,它调用request.get_data(parse_form_data=True),它将填充请求。form MultiDict并保留数据为空。

如果内容类型被识别为表单数据,则请求。数据会将其解析为请求。表单并返回一个空字符串。

要获取原始数据,而不考虑内容类型,请调用request.get_data()。请求。data调用get_data(parse_form_data=True),而如果直接调用默认值为False。

进口的要求:

from flask import request

URL查询参数:

name = request.args.get("name")
age = request.args.get("age")

表单输入:

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

OR(如果知道键存在,则使用索引,指定输入字段的名称)

name = request.form['name']
age = request.form['age']

JSON数据(适用于内容类型application/ JSON)

data = request.get_json()

下面是一个解析发布的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:

在编写一个Slack机器人时,它应该发送JSON数据,我得到了一个有效载荷,其中内容类型是application/x-www-form-urlencoded。

我尝试了request.get_json(),它没有工作。

@app.route('/process_data', methods=['POST'])
def process_data():
   req_data = request.get_json(force=True)

相反,我使用request。form获取包含JSON的表单数据字段,然后加载它。

from flask import json

@ app.route('/slack/request_handler', methods=['POST'])
def request_handler():
   req_data = json.loads(request.form["payload"])