当我运行我的烧瓶代码时,我目前收到以下错误:
flask.debughelpers.FormDataRoutingRedirect - FormDataRoutingRedirect:请求已发送到此 URL ( 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())
Run Code Online (Sandbox Code Playgroud)
{% 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)
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)
| 归档时间: |
|
| 查看次数: |
4725 次 |
| 最近记录: |