我需要将数据从html页面发送回我的Python应用程序:
$.post("/test", {x: [1.0,2.0,3.0], y: [2.0, 3.0, 1.0]}, function(dat) {console.log(dat);});
Run Code Online (Sandbox Code Playgroud)
在服务器上:
@app.route('/test', methods=['POST'])
def test():
print request.form.keys()
print dir(request.form)
print request.form["x[]"]
return jsonify({"Mean": 10.0})
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是钥匙
['y[]', 'x[]']
Run Code Online (Sandbox Code Playgroud)
和
print request.form["x[]"]
Run Code Online (Sandbox Code Playgroud)
结果1.
这样做的正确方法是什么?
Mar*_*ers 19
当发送包含数组或对象值的POST数据时,jQuery遵循向字段名称添加括号的PHP约定.它不是一个Web标准,但因为PHP支持它开箱即用,它很受欢迎.
因此,正如您所发现的那样,使用Flask端的列表处理POST数据的正确方法确实是在字段名称后附加方括号.您可以使用以下方法检索列表的所有值MultiDict.getlist():
request.form.getlist("x[]")
Run Code Online (Sandbox Code Playgroud)
(request.form是一个MultiDict对象).这会返回字符串,而不是数字.如果您知道值是数字,您可以告诉getlist()方法为您转换它们:
request.form.getlist("x[]", type=float)
Run Code Online (Sandbox Code Playgroud)
如果您不希望应用其他括号,请不要将数组用作值,或将数据编码为JSON.不过你必须使用jQuery.ajax():
$.ajax({
url: "/test",
type: "POST",
data: JSON.stringify({x: [1.0,2.0,3.0], y: [2.0, 3.0, 1.0]}),
contentType: "application/json; charset=utf-8",
success: function(dat) { console.log(dat); }
});
Run Code Online (Sandbox Code Playgroud)
在服务器端,用于request.get_json()解析发布的数据:
data = request.get_json()
x = data['x']
Run Code Online (Sandbox Code Playgroud)
这也负责处理数据类型转换; 您将浮点数作为JSON发布,Flask将在Python端再次将这些值解码为浮点值.
| 归档时间: |
|
| 查看次数: |
9873 次 |
| 最近记录: |