当前位置: 首页 > 面试题库 >

将Flask中的JSON对象传递给JavaScript

越琦
2023-03-14
问题内容

我很难将Flask / Python变量传递给Javascript。

  1. 基本上,我是从MySQL导入的,并尝试以三种不同的方式呈现返回值。

(43.8934276, -103.3690243), (47.052060, -91.639868), (45.1118, -95.0396) 那是我的dict项目上运行以下命令时的输出。
new_list = [tuple(d.values()) for d in MySQL_Dict]
output = ', '.join('(' + ', '.join(i) + ')' for i in new_list)

此方法不好,但是我添加了详细信息,根本不是正确的格式。

  1. 我直接将python dict传递给看起来像这样的模板
({'lat': '43.8934276', 'lng': '-103.3690243'}, {'lat': '47.052060', 'lng': '-91.639868'}, {'lat': '45.1118', 'lng': '-95.0396'})

然后在模板方面,我尝试了以下JavaScript行

 var other_coords = {{ MySQL_Dict|tojson }}; 
 var other_coords = {{ MySQL_Dict|tojson|safe }};
 var still_more = JSON.parse(other_coords);

没有一个可以一起工作或单独工作。

  1. 我也尝试过从视图发送字典,该视图json_out = json.dumps(My_Dict)也不起作用。
    所有这些都是为了将​​MySQL数据库的经纬度坐标转换为Google Maps API脚本。让我感到困惑的是,如果我只是将视图中的json.dump结果粘贴到Google Maps脚本中,它就可以完美地工作(在删除引号之后),但是如果我使用一个变量,它将对我不起作用。有人有建议吗?

问题答案:

似乎当前接受的答案中存在一个可能的安全漏洞:如果我们传递给javascript的对象的某个字符串中带有单引号,则该单引号不会被逸出json.dumps,因此允许注入任意代码转换成javascript。最好使用Flask的tojson()模板过滤器,请参阅docs,因为它可以对所有此类字符进行正确的转义(将它们替换为unicode代码)。

这是我的解决方案:

view.py

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def hello_world():
    user = {'firstname': "Mr.", 'lastname': "My Father's Son"}
    return render_template("index.html", user=user)

if __name__ == '__main__':
    app.run()

index.html

<p>Hello, <span id="username"></span></p>
<script>
    var user = JSON.parse('{{ user | tojson | safe}}');
    document.getElementById('username').innerHTML = user.firstname + " " +
            user.lastname;
</script>

生成的JS看起来像:

var user = JSON.parse('{"firstname": "Mr.", "lastname": "My Father\u0027s Son"}');

这是绝对安全的。例如,如果我们使用json.dumps-powered解决方案,我们将得到

var user = JSON.parse('{"firstname": "Mr.", "lastname": "My Father's Son"}');

这在语法上是不正确的(至少可以这样说)。



 类似资料:
  • 问题内容: 我有以下内容,但它不起作用,我在stackoverflow上的某个地方读到了它的工作原理,但我似乎无法使其工作..它出错了……我在做错什么吗? 如果我确实传递了这样的数据-它可以工作-所以我知道我的服务正在工作 问题答案: 我相信代码将在对象上调用.value或.toString(),然后通过网络传递。您想传递JSON。 因此,包括JSON JavaScript库 http://www

  • 问题内容: 我在php中有对象,每个对象代表一个“项目”以及与之相关的所有信息。 当用户浏览页面时,这些对象应传递给javascript。理想情况下,镜像相同的结构,因此我可以使用Raphael在我的网站上将每个项目及其信息显示为单独的形状。 但是,如何将对象从php转换为javascript? 问题答案: 您可以将PHP对象转换为数组,然后使用JSON函数对其进行编码。之后,从JavaScrip

  • 问题内容: 我在烧瓶中有一个称为数组的函数,该函数接收一个列表并打印出列表中的项目: 在客户端,我想将名为str的javascript数组传递给该数组。我该怎么办?这就是我现在所拥有的,但是Flask没有读取添加的变量。有任何想法吗? 问题答案: Flask具有一个称为request的内置对象。在请求中有一个称为args的multidict。 您可以用来检索查询字符串的值。 当然,这需要一个get

  • 问题内容: 这里有角的新手。我试图找出将对象传递给指令时出了什么问题。 这是我的指令: 这是我调用指令的模板: 是一组对象。 当我运行此,日志,而日志罚款的范围,甚至有一个与所有的数据,我找孩子。 我不确定我在这里做错了什么,因为这种确切的方法以前对我有用。 编辑: 我已经用所有必需的代码创建了一个插件:http ://plnkr.co/edit/uJCxrG 如您所见,该作用域在范围中可用,但我

  • 问题内容: 我有一个端点,该端点在url中带有一个值,并产生一些将插入div的内容。我想使用JavaScript变量来构建url 。但是,是作为字符串而不是的值传递的。如何将JavaScript变量的值传递给? 问题答案: 您无法在Jinja中评估JavaScript。您正在尝试在Jinja呈现时在服务器端生成url,但您引用的变量仅在客户端浏览器上运行的JavaScript中可用。 在客户端上构

  • 问题内容: 我正在使用.Net 4,MVC 3和jQuery v1.5做一些工作 我有一个JSON对象,它可以根据调用它的页面而改变。我想将对象传递给控制器​​。 我了解如果我创建一个自定义模型,例如 并在我的控制器中使用它,例如 并使用jQuery的.ajax方法传递对象,如下所示: 这工作正常,我的JSON对象已映射到我的C#对象。我想做的是通过一个可能更改的JSON对象。当它更改时,我不需要