我需要将数据从html页面发送回我的Python应用程序:
$.post("/test", {x: [1.0,2.0,3.0], y: [2.0, 3.0, 1.0]}, function(dat) {console.log(dat);});
在服务器上:
@app.route('/test', methods=['POST'])
def test():
print request.form.keys()
print dir(request.form)
print request.form["x[]"]
return jsonify({"Mean": 10.0})
令我惊讶的是,钥匙是
['y[]', 'x[]']
和
print request.form["x[]"]
结果为1.
这样做的正确方法是什么?
答案 0 :(得分:17)
当发送包含数组或对象值的POST数据时,jQuery遵循PHP convention of adding brackets to the field names。它不是一个Web标准,但因为PHP支持它开箱即用,它很受欢迎。
因此,正如您所发现的那样,使用Flask端的列表处理POST数据的正确方法确实是在字段名称后附加方括号。您可以使用MultiDict.getlist()
request.form.getlist("x[]")
(request.form
是MultiDict
个对象)。这将返回字符串,而不是数字。如果您知道值是数字,您可以告诉getlist()
方法为您转换它们:
request.form.getlist("x[]", type=float)
如果您不希望应用其他括号,请不要将数组用作值,或将数据编码为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); }
});
在服务器端,使用request.get_json()
来解析发布的数据:
data = request.get_json()
x = data['x']
这还负责处理数据类型转换;您将浮点数作为JSON发布,Flask将在Python端再次将这些值重新解码为浮点值。
答案 1 :(得分:1)
你可以使用烧瓶功能request.args.getlist('apps[]')
从您传递给服务器的js对象获取列表
var filter={}
filter.startDate=$('#quant1').val();
filter.endDate=$('#quant2').val();
var checkedItems = [], counter = 0;
$("#appNamesSelector div.active").each(function(idx, li) {
checkedItems[counter] = $(li).text();
counter++;
});
filter.apps=checkedItems;
console.log($.param(filter));
$.ajax({ type: "GET",
url: "/drilldown",
data : filter
});