【问题标题】:Trouble Hosting flask app on pythonanywhere在 pythonanywhere 上托管烧瓶应用程序时遇到问题
【发布时间】:2015-12-30 16:33:02
【问题描述】:

我是第一次使用pythonanywhere

我首先通过 bash 控制台从 github 对我的代码进行 git 克隆。我没有使用虚拟环境。我的 WSGI 应用程序在我的 app.py 文件中被调用。此外,我的代码使用 sqlalchemy 与我的数据库进行交互。

基本上,flask 应用程序就像一个自定义 api,它为 GET 和 POST 请求返回 JSON,我无法查看 JSON 输出。我不确定我到底做错了什么或错过了什么。

app.py 文件中的代码:

#!flask/bin/python
from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy_declarative import Base, Quote
from flask import request
from flask import abort
import json

#connect to database

engine = create_engine("sqlite:///quotes.db")

Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()

app = Flask(__name__)

@app.route("/trumptext/api/quotes", methods=["GET"])
def get_quotes():
    quoteList = session.query(Quote).all()
    result = []
   for q in quoteList:
       my_dict = {}
       my_dict["id"] = q.id
       my_dict["quote"] = q.quote
       result.append(my_dict)
   return json.dumps(result,ensure_ascii=False).encode('utf8')

@app.route("/trumptext/api/quotes", methods=["POST"])
def add_quote():
    if not request.json or not "quote" in request.json:
        abort(400)
    new_quote = request.json["quote"]
    q = Quote(quote=new_quote)
    session.add(q)
    session.commit()
    quoteList = session.query(Quote).all()
    last = quoteList[-1]
    result = []
    my_dict = {}
    my_dict["id"] = last.id
    my_dict["quote"] = last.quote
    result.append(my_dict)
    return json.dumps(result,ensure_ascii=False).encode('utf8'), 201


if __name__ == "__main__":
    app.run()

另外,/var/www/nnelson_pythonanywhere_com_wsgi.py 中的代码:

import os
import sys

path = '/home/nnelson/trumptextapi'
if path not in sys.path:
    sys.path.append(path)

from app import app as application

如果我输入如下内容: http://nnelson.pythonanywhere.com/trumptext/api/quotes(执行 GET 请求)

理想情况下,它应该以 JSON 格式返回存储在 quotes.db 数据库中的所有引号,但是我得到的所有输出如下所示: [] 我使用 curl 工具在 localhost 上测试了我的代码,它工作得很好。我在托管它时遇到了问题

感谢任何帮助。

【问题讨论】:

    标签: python pythonanywhere


    【解决方案1】:

    您正在使用数据库的相对路径,因此它可能正在查看您不期望的数据库。使用数据库的完整路径或使其相对于您的 app.py 文件的路径,以便您知道它从哪里获取数据库。

    【讨论】:

    • 换句话说,我应该这样做:engine = create_engine("sqlite:////home/nnelson/trumptextapi/quotes.db")?编辑:这行得通。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-10
    • 2021-12-27
    • 2021-11-08
    • 1970-01-01
    • 2019-11-24
    • 2020-10-20
    • 2016-12-04
    • 2020-02-04
    相关资源
    最近更新 更多