Flask没有获取更新的JSON

时间:2014-08-19 06:32:07

标签: python json flask

更改JSON文件时,Flask不会使用更新的JSON呈现页面。我怎样才能解决这个问题? Python版本2.7.6。 Flash版本0.9。 我的存储库位于https://github.com/harishvc/githubanalytics

#Starting Flask
#!flask/bin/python
from app import app
app.run(debug = True)

1 个答案:

答案 0 :(得分:2)

问题不在于JSON在更改时没有更新,而是因为您的代码只加载该文件一次,特别是在导入该模块时,永远不会再次加载。显而易见的事情必然会发生。

为了更好地为您提供帮助,您应该将代码的相关部分包含在问题中,而不仅仅是链接中,我将在此为您执行此操作:

with open('path/to/jsonfile.json') as f:
    data = json.load(f)

mydata = []
for row in data['rows']:
    mydata.append({'name': result_row[0], 'count' : result_row[1],})

@app.route('/')
@app.route('/index')
def index():
    return render_template("index.html", data=mydata)

这基本上就是你的代码。在index路由处理程序中的任何位置都不会重新加载该json,并使用您可能已添加到JSON文件中的新数据重新填充mydata列表。所以,创建一个可以做到这一点的方法

mydata = []

def refresh_data():
    mydata.clear()  # clear the list on the module scope

    with open('path/to/jsonfile.json') as f:
        data = json.load(f)

    for row in data['rows']:
        mydata.append({'name': result_row[0], 'count' : result_row[1],})

然后只需让路由处理程序调用{​​{1}}函数:

refresh_data

我个人会更进一步,而是让@app.route('/') @app.route('/index') def index(): refresh_data() return render_template("index.html", data=mydata) 加载一些内容,然后将数据保存到位于某个其他范围的某个列表中,我会让它返回数据以使其更安全。此建议以及其他错误/异常处理和其他清理工作留给您练习。