我想能够获得数据发送到我的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头,这是关于获取原始数据而不是解析数据。
下面是一个解析发布的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:
对于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方法来获得一个默认值。
在使用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中唯一的键。