Flask教程 - 404未找到

9 python flask http-status-code-404 python-2.7

我刚刚完成了Flask基础教程(这里),尽管我已经完成了每一步,当我尝试时

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'))
Run Code Online (Sandbox Code Playgroud)

这是我得到的控制台消息(加上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 -
Run Code Online (Sandbox Code Playgroud)

什么可能出错?

Mar*_*ers 17

你把你的app.run()电话太早:

if __name__== '__main__':
    app.run()
Run Code Online (Sandbox Code Playgroud)

这是在您注册任何路线之前执行的.将这两行到结束你的文件.

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

def show_entries():
    db_get_db()
Run Code Online (Sandbox Code Playgroud)

没有db_get_db()功能; 这应该是db = get_db().


Sal*_*ikh 8

我在此处遵循 Flask 应用程序设置时也发生过这种情况。在路线末尾添加尾部斜杠后,错误消失了。

@app.route('/hello')
    def hello():
        return 'Hello, World!'
Run Code Online (Sandbox Code Playgroud)

被改为

@app.route('/hello/')
    def hello():
        return 'Hello, World!'
Run Code Online (Sandbox Code Playgroud)

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

  • 这是与问题中所述的问题完全不同的问题,其中路线注册根本无法到达。 (2认同)
  • 在这里仍然很高兴,因为我在学习教程时遇到了这个问题,并且通过谷歌搜索“flask教程404”这个问题作为第一个结果出现,所以我认为它也会对其他人有所帮助。 (2认同)