我的理解是,Flask 中的
request.args
包含来自 GET
请求的 URL 编码参数,而 request.form
包含 POST
数据。我很难理解为什么当发送 POST
请求时,尝试使用 request.form
访问数据会返回 400
错误,但是当我尝试使用 request.args
访问它时,它似乎工作正常.
我尝试使用
Postman
和 curl
发送请求,结果是相同的。
curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"
代码:
@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.args.get('name', '')
return jsonify(name = name)
您正在 POST-ing JSON,
request.args
和 request.form
都不起作用。
request.form
仅当您使用正确的内容类型发布数据时才有效; 表单数据使用 application/x-www-form-urlencoded
或
multipart/form-data
编码进行 POST。
当您使用application/json
时,您不再发布表单数据。使用
request.get_json()
来访问 JSON POST 数据:
@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.get_json().get('name', '')
return jsonify(name = name)
正如您所说,request.args
仅包含请求查询字符串中包含的值,这是
?
问号之后的URL的可选部分。由于它是 URL 的一部分,因此独立于 POST 请求正文。
像这样发送数据:
'{"name":"Joe"}'
curl -X POST -d '{"name":"Joe"}' http://example.com:8080/testpoint --header "Content-Type:application/json"
@app.route('/testpoint', methods = ['POST'])
def testpoint():
name = request.form.get('name', '')`enter code here`
return jsonify(name = name)