无法解释的 Flask 404 错误

问题描述 投票:0回答:9

我有一个使用 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='/',
    )
python flask
9个回答
62
投票

我也有同样的问题。我之所以拥有它,是因为我将配置的参数

SERVER_NAME
更改为不是服务器名称的名称。

如果有的话,您可以通过从配置中删除

SERVER_NAME
来解决此错误。


23
投票

有同样的问题,因为以下几行

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

在函数和装饰器之前声明。

将这些行移到文件的最底部对我很有帮助。


15
投票

我知道这已经很旧了,但我刚刚遇到了同样的问题。你的问题可能有很多,但我的问题是我在

from app import views
文件中注释掉了
__init__.py
行。它给了我同样的症状:每个需要
@app.route
的端点和视图都以 404 响应。静态路由(.js 和 .css)很好(这是我的线索)。


2
投票

此时已经非常旧了,但我的与导入错误有关。我正在使用蓝图,并且我有:

from app.auth import bp

而不是

from app.main import bp

我导入了错误的 bp/路线


2
投票

我在 create_app 方法中定义 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') 

1
投票

还要仔细检查路线。如果有些不以斜杠结尾,但你用尾部斜杠调用它,flask 将返回 404。

我在 url 来自电子邮件客户端之后遇到此错误(我不知道为什么)在 url 中附加了一个尾部斜杠。

请参阅文档。


0
投票

我遇到了这个问题,就我而言,这是关于我的

templates
。我有一个像这样的索引页:

<div>
    <a href="index.html">Home</a> |
    <a href="login.html">Login</a> |
    <a href="register.html">Register</a>
    <hr>
</div>

我应该使用

url_for('index')
而不是
index.html

<div>
    <a href="{{ url_for('index') }}">Home</a> |
    <a href="{{ url_for('login') }}">Login</a> |
    <a href="{{ url_for('register') }}">Register</a>
    <hr>
</div>

0
投票

对我来说,由于缺少

favicon.ico
manifest.json
,我的每个请求都收到 404。解决方案是提供缺失的
favicon.ico
,并删除对
manifest.json
的链接相关引用。

我通过打印在我的

@app.errorhandler(Exception)
中的每个请求上导致问题的路径发现了这一点:

from flask import request

@app.errorhandler(Exception)
def handle_exception(err):
  path = request.path # this var was shown to be 'favicon.ico' or 'manifest.json'

0
投票

可能对某人有用。有一次,我同时打开了两个项目,结果一不小心跑错了一个。因此,如果您阅读此线程,请尝试运行“pwd”来检查您当前正在使用哪个文件夹。

© www.soinside.com 2019 - 2024. All rights reserved.