Flask request.args vs request.form

时间:2014-04-27 17:09:12

标签: python rest curl post flask

我的理解是,Flask中的request.args包含来自GET请求的网址编码参数,而request.form包含POST数据。我难以理解的是,为什么在发送POST请求时,尝试使用request.form访问数据会返回400错误,但是当我尝试使用{{{ 1}}它似乎工作正常。

我尝试使用request.argsPostman发送请求,结果相同。

curl

代码:

curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"

1 个答案:

答案 0 :(得分:40)

您正在发布JSON,request.argsrequest.form都不起作用。

request.form仅在您使用正确的内容类型发布数据时才有效; 表单数据要么使用application/x-www-form-urlencoded or 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请求体。