Flask 消息闪烁错误 - flask.debughelpers.FormDataRoutingRedirect

5 python runtime-error flask

当我运行我的烧瓶代码时,我目前收到以下错误:

flask.debughelpers.FormDataRoutingRedirect - FormDataRoutingRedirect:请求已发送到此 URL ( http://localhost:5000/login ),但路由系统自动将重定向发送到“ http://localhost:5000/login/ ”。URL 是用尾部斜杠定义的,所以如果没有斜杠访问,Flask 将自动重定向到带有尾部斜杠的 URL。确保将您的 POST 请求直接发送到此 URL,因为我们无法使浏览器或 HTTP 客户端可靠地或在没有用户交互的情况下使用表单数据重定向。

我认为这与消息闪烁的位置有关,但我似乎无法弄清楚如何解决这个问题。我是烧瓶的新手,所以不完全确定解决这个问题的最佳选择是什么。

我已经包含了我的 index.py 和 login.html 文件来帮助重现这个错误。在此先感谢您的帮助!:)

app.py 的登录部分

@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())
Run Code Online (Sandbox Code Playgroud)

Login.html 模板

{% 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 %}
Run Code Online (Sandbox Code Playgroud)

PRM*_*reu 6

action按照消息中的建议,向表单内的属性添加尾部斜杠:

<form method="POST" action="/login/">
Run Code Online (Sandbox Code Playgroud)

最好使用url_for来构建 URL:

<form method="POST" action="{{ url_for('login') }}">
Run Code Online (Sandbox Code Playgroud)

由于您使用处理帖子的相同视图呈现表单,因此您可以省略action.

<form method="POST">
Run Code Online (Sandbox Code Playgroud)