我的理解是,Flask中的request.args
包含来自GET
请求的网址编码参数,而request.form
包含POST
数据。我难以理解的是,为什么在发送POST
请求时,尝试使用request.form
访问数据会返回400
错误,但是当我尝试使用{{{ 1}}它似乎工作正常。
我尝试使用request.args
和Postman
发送请求,结果相同。
curl
代码:
curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json"
答案 0 :(得分:40)
您正在发布JSON,request.args
和request.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请求体。