Flask Message Flashing错误 - flask.debughelpers.FormDataRoutingRedirect

时间:2017-11-11 23:39:17

标签: python flask runtime-error

我在运行烧瓶代码时遇到以下错误:

  

flask.debughelpers.FormDataRoutingRedirect    - FormDataRoutingRedirect:请求已发送到此网址(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())

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 %}

1 个答案:

答案 0 :(得分:2)

根据消息中的建议,在表单内的action属性中添加一个尾部斜杠:

<form method="POST" action="/login/">

最好使用url_for构建网址:

<form method="POST" action="{{ url_for('login') }}">

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

<form method="POST">