烧瓶教程 - 404 Not Found

Posted

技术标签:

【中文标题】烧瓶教程 - 404 Not Found【英文标题】:Flask tutorial - 404 Not Found 【发布时间】:2014-10-12 12:57:42 【问题描述】:

我刚刚完成了 Flask 基础教程 (here),尽管我已经完成了每一步,但我正在尝试

python flaskr.py

我得到的是 404 Not Found 错误提示

The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

这是文件中的代码

import os
import sqlite3
from flask import Flask, request, session, g, redirect, url_for, abort, render_template, flash

#create app
app = Flask(__name__)
app.config.from_object(__name__)

#load default conf and override config from an env var
app.config.update(dict(
    DATABASE=os.path.join(app.root_path, 'flaskr.db'),
    DEBUG=True,
    SECRET_KEY = 'dev key',
    USERNAME = 'admin',
    PASSWORD = 'admin'
))
app.config.from_envvar('FLASKR_SETTINGS', silent=True)

def connect_db():
    """connect to the specific db"""
    rv = sqlite3.connect(app.config['DATABASE'])
    rv.row_factory = sqlite3.Row
    return rv

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


def get_db():
    """opens a new db connection if there is none yet for the cyrrent app"""
    if not hasattr(g, 'sqlite_db'):
        g.sqlite_db = connect_db()
        return g.sqlite_db

@app.teardown_appcontext
def close_db(error):
    """closes the db again at the end of the request."""
if hasattr(g, 'sqlite_db'):
    g.sqlite_db.close()

def init_db():
    with app.app_context():
        db = get_db()
        with app.open_resource('schema.sql', mode='r') as f:
            db.cursor().executescript(f.read())
        db.commit()


@app.route('/')
def show_entries():
    db_get_db()
    cur = db.execute('select title, text from entries order by id desc')
    entries = cur.fetchall()
    return render_template('show_entries.html', entries=entries)

@app.route('/add', methods=['POST'])
def add_entry():
    if not session.get('logged_in'):
        abort(401)
    db = get_db()
    db.execute('insert into entries (title, text) values (?,?)',
        [request.form['title'], request.form['text']])
    db.commit()
    flash('New entry was successfully posted')
    return redirect(url_for('show_entries'))

@app.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('You were logged in')
            return redirect(url_for('show_entries'))
    return render_template('login.html', error=error)

@app.route('/logout')
def logout():
    session.pop('logged_in', None)
    flash('You were logged out')
    return redirect(url_for('show_entries'))

这是我收到的控制台消息(加上 3 次刷新页面尝试):

user@user:~/Flask/flaskr$ python flaskr.py
 * Running on http://127.0.0.1:5000/
 * Restarting with reloader
127.0.0.1 - - [19/Aug/2014 15:23:40] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [19/Aug/2014 15:23:41] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [19/Aug/2014 15:23:42] "GET / HTTP/1.1" 404 -

对可能出现的问题有什么建议吗?

【问题讨论】:

【参考方案1】:

你打你的app.run()电话太早了

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

这是在您的任何路线注册之前执行的。将这两行移到文件的end

接下来,show_entries() 中的第一行不正确:

def show_entries():
    db_get_db()

没有db_get_db()函数;这应该是db = get_db()

【讨论】:

【参考方案2】:

在遵循 Flask Application Setup here 时也发生在我身上。在路径末尾附加一个斜杠后,错误就消失了。

@app.route('/hello')
    def hello():
        return 'Hello, World!'

改为

@app.route('/hello/')
    def hello():
        return 'Hello, World!'

问题就解决了。希望它对正在寻找此类问题的任何人有所帮助。

【讨论】:

这是一个与问题中所述的完全不同的问题,其中根本没有到达路由注册。 在这里仍然很好,因为我在学习本教程时遇到了这个问题,通过谷歌搜索flask tutorial 404 这个问题是第一个结果,所以认为它也会有所帮助其他人。

以上是关于烧瓶教程 - 404 Not Found的主要内容,如果未能解决你的问题,请参考以下文章

上古版本CentOS 6 yum换源教程 解决404 Not Found #yyds干货盘点#

Codeigniter 404 Page Not Found 找不到您请求的页面

无法在 Gitlab 上发布私有 npm 包 - E404 Not found PUT

VM虚拟机安装系统出现Operating system not found或Directory “ZEBOOT” not found Error loading iMage错误,保姆级解决教程

将正文添加到 404 Not Found 异常

Nginx 404 Not Found 解决办法