首页 > 解决方案 > 为什么我在 python 中的登录表单无法正常工作?

问题描述

我的登录表单有问题。我使用了 Flask 和 Bcrypt。

当我尝试使用用户名和密码登录时,登录页面没有返回任何内容,我留在同一个登录页面,唯一的区别是 url 返回:

http://127.0.0.1:5000/?csrf_token=IjgwZTRhZmI4NWM2MTExNTdiM2I1NmM2YTYzZjIxZTdhMmI4M2JkZTgi.YYwLuQ.bYG6VKjMZ65p4i86S9-U23L9c_A&username=alexcar&password=1234Ab&submit=Login

这是登录表单def:

@app.route('/', methods=['GET','POST'])
def login():
    form = LoginForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.username.data).first()
        if user:
            if bcrypt.check_password_hash(user.password, form.password.data):
                login_user(user)
                return redirect(url_for('admin'))  
    return render_template('login.html', form=form)

当用户通过身份验证时返回页面 admin,在 Def admin 中为:

@app.route('/admin', methods=['GET','POST'])
@login_required
def admin():
    return render_template('admin.html')

在 Login.html 表单上是:

<div class="form-floating">
      <form action="" method="post">
      {{ form.hidden_tag() }}
      {{ form.username }}
      <br> </br>
     {{ form.password }}
    {{ form.submit }}
      </form>
    </div>

注册表单运行良好,但登录页面不行。

标签: pythonflask-wtformsbcryptflask-logincsrf-token

解决方案


问题出在你登录后的return语句。注意:url_for取的是路由函数的名字(def admin)而不是(def .admin)

return redirect(url_for('.admin'))

应该:

return redirect(url_for('admin'))

推荐阅读