我正在尝试将Flask后端的JSON数据发送到JS前端。
准备数据的Flask函数如下:
from flask import Flask, jsonify
import pandas as pd
@app.route('/get_data')
def get_data():
projects = pd.read_excel('data.xlsx').fillna('Unassigned')
string_df = projects.select_dtypes(['object']) # select a subset of df containing only string columns
projects[string_df.columns] = string_df.apply(lambda col: col.str.strip()) # trim all strings in the subset
projects = projects.to_dict(orient='records')
options = get_options(projects)
response = {
'projects': projects,
'options': options,
}
return jsonify(response)
def get_options(projects):
"""Returns dropdowns options"""
options = {}
for project in projects:
region = project['Region']
ma = project['MA/Segment']
market = project['Market']
subsegment = project['Subsegment']
options \
.setdefault(region, {}) \
.setdefault(ma, {}) \
.setdefault(market, []) \
.append(subsegment)
options[region][ma][market] = list(set(options[region][ma][market]))
return options
在前端,我这样获取它:
function get_data(callback) {
console.log('get_data')
var url = "{{ url_for('get_data') }}"
fetch(url,
{}
)
.then(response => response.json())
.then(json =>callback(json))
}
function main(json) {
console.log('main')
console.log(json)
}
get_data(main)
正在调用get_data
函数,但是从未调用main
函数。该应用程序只是不加载数据,浏览器控制台中没有任何错误消息。
我已经确定了引起问题的那一行:
projects[string_df.columns] = string_df.apply(lambda col: col.str.strip())
如果我注释掉那行,一切都会很好,但是很明显,我会在数据中得到未修饰的字符串。
此外,两个Flask函数都可以像普通的Python函数一样在Flask上下文之外正常工作。
导致停靠的这条线可能有什么问题?我怀疑以这种方式修剪琴弦可能会导致Flask的jsonify
出现故障。