【问题标题】:404 Not Found error when running Flask运行 Flask 时出现 404 Not Found 错误
【发布时间】:2017-11-25 02:47:12
【问题描述】:

我正在开发一个简单的 Flask 应用程序,基于这个例子: https://gist.github.com/cuibonobo/8696392#apache

下面是文件夹结构:

flaskapp:
   app:
      __init__.py
      static:
          css:
              main.css
      templates:
          404.html
          base.html
          forms:
              macros.html
          register.html
          users:
              login.html
              profile.html
          register.html
      users:
         __init__py
         constants.py
         decorators.py
         forms.py
         models.py
         views.py
app.db
config.py
run.py
shell.py

运行.py:

#!flask/bin/python
from app import app
app.run(debug=True)

shell.py: #!/usr/bin/env python 导入操作系统 导入读取线 从 pprint 导入 pprint

from flask import *
from app import *

os.environ['PYTHONINSPECT'] = 'True'

views.py:

from flask import Blueprint, request, render_template, flash, g, session, redirect, url_for
from werkzeug import check_password_hash, generate_password_hash

from app import db
from app.users.forms import RegisterForm, LoginForm
from app.users.models import User
from app.users.decorators import requires_login

mod = Blueprint('users', __name__, url_prefix='/users')


@mod.route('/')
@requires_login
def home():
return render_template("users/profile.html", user=g.user)

@mod.before_request
def before_request():
"""
pull user's profile from the database before every request are treated
"""
g.user = None
if 'user_id' in session:
  g.user = User.query.get(session['user_id'])

@mod.route('/login/', methods=['GET', 'POST'])
def login():
  """
  Login form
  """
  form = LoginForm(request.form)
  # make sure data are valid, but doesn't validate password is right
  if form.validate_on_submit():
    user = User.query.filter_by(email=form.email.data).first()
    # we use werzeug to validate user's password
    if user and check_password_hash(user.password, form.password.data):
      # the session can't be modified as it's signed, 
      # it's a safe place to store the user id
      session['user_id'] = user.id
      flash('Welcome %s' % user.name)
      return redirect(url_for('users.home'))
    flash('Wrong email or password', 'error-message')
  return render_template("users/login.html", form=form)

@mod.route('/register/', methods=['GET', 'POST'])
def register():
  """
  Registration Form
 """
 form = RegisterForm(request.form)
  if form.validate_on_submit():
    # create an user instance not yet stored in the database
    user = User(name=form.name.data, email=form.email.data, \
      password=generate_password_hash(form.password.data))
    # Insert the record in our database and commit it
    db.session.add(user)
    db.session.commit()

    # Log the user in, as he now has an id
    session['user_id'] = user.id

    # flash will display a message to the user
    flash('Thanks for registering')
    # redirect user to the 'home' method of the user module.
    return redirect(url_for('users.home'))
  return render_template("users/register.html", form=form)

当我通过以下方式启动本地主机时:

python run.py

我收到 404 Not Found。

我可能做错了什么?

【问题讨论】:

  • 你能分享你的run.py代码吗?很可能您没有为“/”路径配置路由。
  • 显示你的views.py文件
  • @Spiderman - 用 view.py 更新了问题

标签: python flask flask-sqlalchemy flask-wtforms


【解决方案1】:

我猜你没有为网站的根目录定义路由。

@app.route('/')
def your_root_route():
    return "hello"

【讨论】:

  • 在views.py中?
  • Flask 在构建应用程序方面提供了很大的灵活性。如果你愿意,你可以在那里定义它,但你基本上可以在任何地方定义它。如果你想把它放在views.py中,你可以。但同样,这并不是严格要求的。
猜你喜欢
  • 2016-05-05
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2016-10-05
  • 2015-08-11
  • 2017-10-19
  • 2018-07-19
  • 1970-01-01
相关资源
最近更新 更多