在 pythonanywhere 上托管烧瓶应用程序时遇到问题
Trouble Hosting flask app on pythonanywhere
我是 pythonanywhere 的第一次用户
我首先通过 bash 控制台从 github 克隆了我的代码 git。我没有使用虚拟环境。我的 WSGI 应用程序在我的 app.py 文件中被调用。此外,我的代码使用 sqlalchemy 与我的数据库进行交互。
基本上,flask 应用程序就像一个自定义的 api,它 returned JSON 用于 GET 和 POST 请求,我无法查看 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 请求)
理想情况下应该 return 所有以 JSON 格式存储在 quotes.db 数据库中的报价,但是我得到的所有输出如下所示: [] 我测试了我的代码在本地主机上使用 curl 工具,它工作得很好。不过我在托管时遇到了问题
感谢任何帮助。
您使用的是数据库的相对路径,因此它可能正在查看您不期望的数据库。使用数据库的完整路径或使其相对于 app.py 文件的路径,以便您知道它从哪里获取数据库。
我是 pythonanywhere 的第一次用户
我首先通过 bash 控制台从 github 克隆了我的代码 git。我没有使用虚拟环境。我的 WSGI 应用程序在我的 app.py 文件中被调用。此外,我的代码使用 sqlalchemy 与我的数据库进行交互。
基本上,flask 应用程序就像一个自定义的 api,它 returned JSON 用于 GET 和 POST 请求,我无法查看 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 请求)
理想情况下应该 return 所有以 JSON 格式存储在 quotes.db 数据库中的报价,但是我得到的所有输出如下所示: [] 我测试了我的代码在本地主机上使用 curl 工具,它工作得很好。不过我在托管时遇到了问题
感谢任何帮助。
您使用的是数据库的相对路径,因此它可能正在查看您不期望的数据库。使用数据库的完整路径或使其相对于 app.py 文件的路径,以便您知道它从哪里获取数据库。