Why am I getting 404 error in Flask?

2019-04-12 11:35发布

问题:

I'm a Django developer learning Flask. I'm pretty new to how things work in Flask. I'm getting a 404 with the following code when I visit localhost:5000. Could someone explain why I'm getting this:

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

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

from datetime import datetime

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////media/workdrive/workspace/purkinje/temp.db'
app.debug = True
db = SQLAlchemy(app)

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

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80))
    body = db.Column(db.Text)
    pub_date = db.Column(db.DateTime)

    category_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    category = db.relationship('Category', backref=db.backref('posts', lazy='dynamic'))

    def __init__(self, title, body, category, pub_date=None):
        self.title = title
        self.body = body
        if pub_date is None:
            pub_date = datetime.utcnow()
        self.pub_date = pub_date
        self.category = category

    def __repr__(self):
        return '<Post %r>' % self.title

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return '<Category %r> % self.name'

@app.route('/')
def index():
    posts = Post().query.all()
    return render_template('templates/index.html', posts=posts)

回答1:

You're calling app.run() before registering your handler. You should move the whole if __name__ == '__main__' block to the bottom of the script.