在 pythonanywhere Flask 应用程序中读取 json

Reading json in pythonanywhere flask app

初见this question。我的问题是我在 pythonanywhere 上有一个烧瓶应用程序 运行,它从服务器上同一目录中的 json 文件读取信息,并收到以下错误: Internal Server Error:The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application..

我将应用程序简化为:

from flask import Flask
import json
app = Flask(__name__)

@app.route('/')
@app.route('/index')
def index():
    return 'Index'

@app.route('/courses')
def courses():
    with open('courses.json', 'r') as f:
        these_courses = json.load(f)
    return str(these_courses)

如果我转到索引页面,我会看到索引,正如预期的那样,但是如果我尝试转到 /courses,那么我会得到 error.The 在 localhost 上一切正常,然后使用相同的代码我在服务器上收到错误,所以我知道从文件中读取工作正常。这让我觉得这可能是 json 与 pythonanywhere 结合所独有的问题。

编辑:courses.json 的路径名可能有问题,但它在同一目录中,所以我觉得应该没问题,只是一个想法

原来是路径名问题。我想文件需要从根目录路由。

我运行:

def courses():
    my_dir = os.path.dirname(__file__)
    json_file_path = os.path.join(my_dir, 'courses.json')
    return json_file_path

找到路径,然后改函数为:

def courses():
    with open('/home/username/path/to/file/courses.json', 'r') as f:
        these_courses = json.load(f)
    return str(these_courses)

现在它起作用了:D

然后为了制作一个更好的版本,当您移动项目时不会中断,我是这样做的:

def courses():
    my_dir = os.path.dirname(__file__)
    json_file_path = os.path.join(my_dir, 'courses.json')
    with open(json_file_path, 'r') as f:
        these_courses = json.load(f)
    return str(these_courses)

替代方案:

import pathlib

path = pathlib.Path('courses.json').absolute()

these_courses = json.loads(path.read_text())