Python/Flask与Javascript之间的通信
我正在开发一个级联下拉菜单,使用JavaScript来实现,这个菜单的数据是通过Python/Flask创建的数组来填充的。我有一个Python模块和一个HTML文件,需要在它们之间传递数据和响应。
第一个JavaScript下拉菜单已经填充了可以选择的数据类型名称。一旦用户选择了一个选项,这个信息就需要传递给Python模块。然后,我会使用Python的ftplib从FTP服务器获取与他们选择的名称相关的信息(也就是这个数据集的年份列表)。接下来,第二个下拉菜单会根据年份列表进行填充。当用户选择了某一年后,我会再次访问FTP服务器,获取该年份的天数列表。我在通过FTP访问信息方面没有问题。
我就是搞不清楚怎么在Python和HTML页面之间进行通信。例如,如何在用户选择第一个下拉菜单的选项后,执行一个Python函数来返回一个新的数组?另外一个选择是直接在JavaScript中访问FTP信息,但我发现这样做没有Python的ftplib简单。对于如何解决这个问题,任何建议都很有帮助。
2 个回答
这听起来像是一个非常适合用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/)。
好吧,当 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
})
});