python - 为什么我在 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>
注册表单运行良好,但登录页面不行。
解决方案
问题出在你登录后的return语句。注意:url_for取的是路由函数的名字(def admin)而不是(def .admin)
return redirect(url_for('.admin'))
应该:
return redirect(url_for('admin'))