无法解释的Flask 404错误

47 投票
8 回答
71074 浏览
提问于 2025-04-18 11:13

我有一个使用Flask的网页。之前运行得很好,但最近每次请求都返回404错误,似乎找不到正确的接口。不过:

  • 在本地,网站仍然可以正常工作,只有在我的VPS上出现了这个奇怪的情况。
  • url_for可以正常使用,app.view_functions也包含了所有的路由。
  • 然而,我在VPS上依然收到404错误,连//static/下面的内容也不例外。

这里是部分代码,内容有点多,不方便全部展示,而且不是所有的都相关:

#snip

from flask import Flask, render_template, abort, request, redirect, url_for, session
from flask.ext.babelex import Babel
from flask.ext import babelex

#snip

app = Flask(__name__)
app.secret_key = #snip

#snip

#just one of the routes
@app.route('/')
def about():
    return render_template('about.html')

#snip

@app.errorhandler(404)
def page_not_found(e):
    #snip
    return render_template('404.html'), 404

#snip

if __name__ == '__main__':
    app.run(debug=True)
else:
    app.config.update(
        SERVER_NAME='snip.snip.com:80',
        APPLICATION_ROOT='/',
    )

8 个回答

2

我在创建应用程序的方法里定义flask_restful的路由时遇到了这个错误。我还是不太明白为什么这样不行,但当我把它的范围/位置调整到下面这样之后,它就正常工作了。

from flask import Flask
from flask_restful import Resource
from extensions import db, api
from users.resources import User

def create_app():
    app = Flask(__name__)
    app.config.from_object('settings')
    db.init_app(app)
    api.init_app(app)

    return app

api.add_resource(User, '/users') 
2

这个问题现在看起来已经很久了,但我遇到的情况是跟导入时的一个错误有关。我在使用蓝图的时候,写成了:

from app.auth import bp

而应该是

from app.main import bp

我导入了错误的蓝图/路由。

15

我知道这个问题已经有点老了,但我刚碰到同样的问题。你的问题可能有很多原因,但我的原因是我在 __init__.py 文件里把 from app import views 这一行注释掉了。这样做后,我遇到了同样的情况:每个需要 @app.route 和视图的接口都返回了404错误。静态文件(.js和.css)没有问题(这让我意识到问题所在)。

23

我也遇到了同样的问题,因为下面这些代码

if __name__ == '__main__':
    app.run(host='127.0.0.1', threaded=True)

是在函数和装饰器之前写的。

把这些代码移动到文件的最底部后,问题就解决了。

61

我也遇到过同样的问题。这个问题是因为我把配置里的 SERVER_NAME 参数改成了一个不是服务器名字的名称。

如果你也有这个问题,可以通过把配置中的 SERVER_NAME 删除来解决。

撰写回答