Flask post解析数据变量

时间:2017-04-08 16:34:35

标签: jquery python ajax flask

我正在使用AJAX将POST中的数据发送到Flask,但是我得到的POST数据并不是我的技能可以解析的。有人可以帮助我尝试理解如何将这些变量解析成列表吗?

在Flask中看到的数据如下所示:

items%5B%5D=104-92923-G42LH&items%5B%5D=102-10001-CRD-P07G19&items%5B%5D=104-92925-SML-CLRH&items%5B%5D=104-92923-92R-LH&items%5B%5D=104-92924-COLTRH

当我使用在线解码器对其进行解码时,我看到了:

items[]=104-92923-G42LH&items[]=102-10001-CRD-P07G19&items[]=104-92925-SML-CLRH&items[]=104-92923-92R-LH&items[]=104-92924-COLTRH

我的问题是,我不知道如何将此字符串解析为列表。我使用了不同的request函数来查看我是否可以通过其他方式获取数据,但我仍然没有运气。目前我在我的flask函数中使用data = request.stream.read()来查看数据。

此外,这是我的AJAX功能:

$("#myForm").submit(function(e) {
            var url = "http://127.0.0.1:8080/_data";
            var result = [];
                $('.varSku').each(function () {
                result.push($(this).data("sku"));
                });
            var data1 = {items: result};
            $.ajax({
                type: "POST",
                url: url,
                dataType : "string",
                data: data1,
                success: function(data)
                {
                    console.log(data);
                }
                });
            e.preventDefault();
        });

我的烧瓶功能:

@app.route('/_data', methods=['GET','POST'])
def invoice():
    data = request.stream.read()
    print data.decode('utf8') 
    return "data"

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

您正在寻找request.form,它会自动将正文内容解析为字典。在您的情况下,您应该使用request.form["items"]

查看documentation以获取更多信息。

答案 1 :(得分:0)

问题在于,当发送包含数组或对象值的POST数据时,jQuery遵循PHP惯例,即在字段名称中添加括号。

为了超越它,我不得不使用另一个名为MultiDict.getlist()的函数,因此我不得不改为request.form.getlist("items[]")

感谢@Martin的帮助