将Javascript数组传递给Flask

6

我在 Flask 中有一个名为 array 的函数,它接受一个列表并打印出列表中的项目:

def array(list):
    string = ""
    for x in list:
        string+= x
    return string

在客户端,我想将一个名为“str”的javascript数组传递到此数组中。我该如何做?这是我目前的代码,但Flask无法读取新增变量。有什么想法吗?
for (var i = 0; i < response.data.length; i++) {
            console.log(i);

            // str = str + "<br/><b>Pic</b> : <img src='"+ response.data[i].picture +"'/>";

            str[i] = response.data[i].picture;
        }
        window.location = "{{ url_for('array', str=list ) }}";

我在这个领域有点不知所措,但这可能会对你有所帮助。https://dev59.com/OGUp5IYBdhLWcg3wEEbd - Shashank
同时,https://dev59.com/EG7Xa4cB1Zd3GeqPnj9Z#14778465 - Shashank
你想将列表转换为查询字符串并附加到最后一行的URL中吗? - JAL
@JAL,没错,Shashank发布的链接似乎都没有展示如何做到这一点。有什么想法吗? - Aloke Desai
好的,它需要以name=val&的格式。我在Django和PHP中做过这个,但没有Flask...总之,它被称为查询字符串编码。 - JAL
1
哦,是的,你可以在Python的urllib中完成这个任务。https://dev59.com/kW035IYBdhLWcg3wH8Ul - JAL
1个回答

9

Flask内置了一个名为request的对象。在request中,有一个名为args的multidict。

你可以使用request.args.get('key')来检索查询字符串的值。

from flask import request

@app.route('/example')
def example():
    # here we want to get the value of the key (i.e. ?key=value)
    value = request.args.get('key')

当然,这需要一个GET请求(如果你{{link1:使用POST},那么使用request.form)。在JavaScript方面,你可以使用纯JavaScript或jQuery进行GET请求。在我的示例中,我将使用jQuery。
$.get(
    url="example",
    data={key:value}, 
    success=function(data) {
       alert('page content: ' + data);
    }
);

这是如何将数据从客户端传递到flask。Jquery代码中的函数部分是将数据从flask传递到jquery的方式。举个例子,假设您有一个名为/example的视图,在jquery侧你会传入一个键值对"list_name":"example_name"。
from flask import jsonify
def array(list):
    string = ""
    for x in list:
        string+= x
    return string

@app.route("/example")
def example():
    list_name = request.args.get("list_name")
    list = get_list(list_name) #I don't know where you're getting your data from, humor me.
    array(list)
    return jsonify("list"=list) 

在 jQuery 中的成功函数中,你会这样说:
  success=function(data) {
       parsed_data = JSON.parse(data)
       alert('page content: ' + parsed_data);
    }

请注意,出于安全考虑,Flask不允许在JSON响应中使用顶级列表。


对于POST请求,如果以JSON格式发送,则Flask端上的数据可能在request.json中。 - Mahdi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接