【问题标题】:Getting 404 not found on Flask app deployed on PythonAnywhere在 PythonAnywhere 上部署的 Flask 应用程序上找不到 404
【发布时间】:2020-08-09 18:10:22
【问题描述】:

我已经翻遍了大概 50 种不同的答案,但我仍然没有设法解决它......我对烧瓶和 python 还是很陌生。

我有一个在本地运行良好的应用程序,但我一直在努力在任何地方部署 python。最初我有一些导入模块问题,现在它运行但不返回任何 html 模板,尽管没有看到任何其他问题。我遇到的主要问题是它无法从 wsgi 中找到“路线”应用程序,我修复了在 routes.py 上添加 app = Flask(name) 行(短蓝图对象不可调用)。

routes.py:

from flask import Blueprint, render_template, request, redirect, send_file
import pyqrcode 
from pyqrcode import QRCode 
import subprocess

from extensions import db
from models import Link

app = Flask(__name__)

short = Blueprint('short', __name__, url_prefix='/')

@short.route('/index')
def index():
    return render_template('index.html')

初始化.py

from flask import Flask
from extensions import db
from routes import short

def create_app(config_file='settings.py'):

    app = Flask(__name__)

    app.config.from_pyfile(config_file)

    db.init_app(app)

    app.register_blueprint(short)

    return app

wsgi.py

import sys

# add your project directory to the sys.path
project_home = u'/home/b297py/mysite'

if project_home not in sys.path:
    sys.path = [project_home] + sys.path

# import flask app but need to call it "application" for WSGI to work
from routes import app as application

出于测试的目的,我将所有 html 模板都放在了根目录和特定的 /template 目录中,但这并没有解决问题。

【问题讨论】:

  • 如果您还可以添加带有您尝试获取的地址和错误消息的屏幕截图(即使它是 404),那将非常有帮助
  • 感谢@AlexanderPushkarev 我收到以下消息:未找到服务器上未找到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。我正在尝试连接到 mysite.pythonanywhere.com,在本例中为 b297py.pythonanywhere.com,

标签: python flask wsgi pythonanywhere


【解决方案1】:

在 wsgi.py 中,您没有调用 create_app,因此您永远不会注册蓝图。你应该替换:

from routes import app as application

类似:

from package_name import create_app
application = create_app() 

(例如:https://www.pythonanywhere.com/forums/topic/12889/#id_post_50171

正如您所提到的,将app = Flask(__name__) 添加到routes.py 的修复允许您绕过 create_app(因此,如果您想坚持使用 create_app 方法,则应该将其删除)。

【讨论】:

  • 感谢@JBLaf。我是否需要导入我在 init.py 中创建的 create_app 函数?我试过这样做,但出现错误:“运行 WSGI 应用程序时出错 2020-04-26 20:45:43,441: AssertionError: View function mapping is overwriting an existing endpoint function: short.index” 2020-04-26 20 :45:43,441:文件“/var/www/b297py_pythonanywhere_com_wsgi.py”,第 18 行,在 2020-04-26 20:45:43,441:application = create_app()。我检查了 Flask 文档,似乎我没有得到任何东西 link
  • 是的,你必须导入这个。您是否删除了 routes.py 中的其他 Flask 对象创建。您可能需要查看 blog.miguelgrinberg.com/post/…digitalocean.com/community/tutorials/… :app/__init__.py 是您所追求的(然后使用 from app import create_app 将其导入 wsgi.py
  • 感谢 JBLaf。最终,我重新创建了 virtualenv 并设置了 wsgi 文件。
猜你喜欢
  • 2019-05-20
  • 1970-01-01
  • 2016-09-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多