Python/Flask与Javascript之间的通信

1 投票
2 回答
3145 浏览
提问于 2025-04-18 16:00

我正在开发一个级联下拉菜单,使用JavaScript来实现,这个菜单的数据是通过Python/Flask创建的数组来填充的。我有一个Python模块和一个HTML文件,需要在它们之间传递数据和响应。

第一个JavaScript下拉菜单已经填充了可以选择的数据类型名称。一旦用户选择了一个选项,这个信息就需要传递给Python模块。然后,我会使用Python的ftplib从FTP服务器获取与他们选择的名称相关的信息(也就是这个数据集的年份列表)。接下来,第二个下拉菜单会根据年份列表进行填充。当用户选择了某一年后,我会再次访问FTP服务器,获取该年份的天数列表。我在通过FTP访问信息方面没有问题。

我就是搞不清楚怎么在Python和HTML页面之间进行通信。例如,如何在用户选择第一个下拉菜单的选项后,执行一个Python函数来返回一个新的数组?另外一个选择是直接在JavaScript中访问FTP信息,但我发现这样做没有Python的ftplib简单。对于如何解决这个问题,任何建议都很有帮助。

2 个回答

0

这听起来像是一个非常适合用Python来创建REST API的问题(你可以参考一些教程,比如http://tech.pro/tutorial/1213/how-to-build-an-api-with-python-and-flask)。然后,你可以用JavaScript来调用这个API(其中一个选择是http://api.jquery.com/jquery.ajax/)。

1

好吧,当 Flask 执行 render_template() 的时候,它会把 Jinja 模板中的内容填充好,然后把生成的 HTML 页面发送给客户端。实际上,HTML 页面和 Python 之间并没有直接的交流。

我建议使用 POST 请求和点击事件。

@app.route('/data/')
def get_data(year):
    """ get your data here and return it as json """
    year = request.form.get('year')
    # ...
    return jsonify(yourdata)

然后,在 JavaScript 中大概可以这样做:

$('.dropdown-button').click(function() {
  var year = this.data('year')
  $.post('/data/', {'year': year}, function(data) {
    // you now have your data as json here
    // you can do as you wish with it
  })
});

撰写回答