这是我们从javascript向Python发送名为“ sample”的变量的方式。
JS代码:
function buildCharts(sample) {
var url = `/samples/${sample}`;
d3.json(url).then(function(data){
// send data retrived from my url to two plotting functions
piechart(data);
bubblechart(data);
});
};
Python:
@app.route("/samples/<sample>")
def samples(sample):
"""Return `otu_ids`, `otu_labels`,and `sample_values`."""
stmt = db.session.query(Samples).statement
df = pd.read_sql_query(stmt, db.session.bind)
# Filter the data based on the sample number and
# only keep rows with values above 1
sample_data = df.loc[df[sample] > 1, ["otu_id", "otu_label", sample]]
# Format the data to send as json
data = {
"otu_ids": sample_data.otu_id.values.tolist(),
"sample_values": sample_data[sample].values.tolist(),
"otu_labels": sample_data.otu_label.tolist(),
}
return jsonify(data)
Python使用检索到的变量进行查询,并将数据返回给javascript。我们可以发送多个变量吗?我有两种形式,当用户填写它时,我都希望将这两个变量都发送给python来执行某些活动,然后将其发送回javascript,以便绘制成html。
答案 0 :(得分:0)
发送完两个变量后,就不必真正发送两个变量了。
通过JavaScript,只需创建一个对象,例如:
let myVar = {position: "data scientist", location: "Paris"};
通过任何方便的方法(例如XMLHttpRequest)发送到Python应用程序。在Python方面,您可以使用:
import json
#Receive the request by any means or method
my_var = json.loads(object_in_the_request) #object_in_the_request is JSON-like
position = my_var["position"] #data scientist
location = my_var["location"] #location
请记住:my_var
(Python)类似于dict,因此您可以通过键(my_var["location"]
)访问其字段。另一方面,myVar
(JavaScript)是一个对象,因此您可以通过myVar.location
访问其属性。
当然,这个例子很简单。我没有考虑例外情况和细节问题,但我想您已经明白了。
最重要的是,此解决方案在变量(或字段)数量方面非常灵活,因此添加第三个属性与添加第四个属性一样容易。
希望有帮助