在pythonanywhere烧瓶app中读json

时间:2015-08-24 15:30:43

标签: python json flask pythonanywhere

首先我看到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,那么我会收到错误。整个事情在localhost上正常运行,然后是相同的代码我在服务器上收到错误,所以我知道从文件读取工作正常。这让我觉得这可能是json与pythonanywhere相结合的独特问题。

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

2 个答案:

答案 0 :(得分:2)

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

我跑了:

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)

答案 1 :(得分:0)

作为替代:

import pathlib

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

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