我在运行烧瓶代码时遇到以下错误:
flask.debughelpers.FormDataRoutingRedirect - FormDataRoutingRedirect:请求已发送到此网址(http://localhost:5000/login),但路由系统自动发出重定向到" http://localhost:5000/login/"。 URL是使用尾部斜杠定义的,因此如果没有使用斜杠,Flask将自动重定向到带有斜杠的URL。请确保直接将您的POST请求发送到此URL,因为我们无法使浏览器或HTTP客户端可靠地重定向表单数据或无需用户交互。
我认为这与消息闪烁的位置有关,但我似乎无法弄清楚如何解决这个问题。我是新手,因此不能完全确定解决此问题的最佳选择。
我已经包含了我的index.py和login.html文件,以帮助重现此错误。在此先感谢您的帮助! :)
@app.route('/login/', 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 check_password_hash(user.password, form.password.data):
login_user(user, remember=form.remember.data)
flash("Invalid username or password")
return redirect(url_for('dashboard'))
return render_template('login.html', form=form, errors=form.errors.items())
{% block body_content %}
<div class="container">
<form method="POST" action="/login">
{{ form.csrf_token }}
<div class="form-group">
{{ form.username }}
</div>
<div class="form-group">
{{ form.password }}
</div>
<div class="form-group">
{{ form.remember }}
</div>
<button type="submit" class="btn btn-primary">Sign In</button>
</form>
<div class="errors">
{% for field, err in errors %}
<p>{{field}} : {{err|join(', ')}}</p>
{% endfor %}
</div>
<div class="message-flash">
{% for message in get_flashed_messages() %}
<div class=flash>{{ message }}</div>
{% endfor %}
</div>
</div>
{% endblock %}
答案 0 :(得分:2)
根据消息中的建议,在表单内的action
属性中添加一个尾部斜杠:
<form method="POST" action="/login/">
最好使用url_for
构建网址:
<form method="POST" action="{{ url_for('login') }}">
由于您使用处理帖子的相同视图呈现表单,因此可以省略action
。
<form method="POST">