我在登录视图中使用此代码:
def login():
form = LoginForm()
print("before submit request is ", request)
if form.validate_on_submit():
# Some code was deleted for short
return redirect(request.args.get('next') or url_for('main.index'))
return render_template('accounts/login.html', form=form)
当我点击视图为的链接时:
@login_required
def index(count, page):
pass
我得到的调试输出是:
('before submit request is ', <Request 'http://192.168.1.8:9000/accounts/login?next=%2Fperson' [GET]>)
('before submit request is ', <Request 'http://192.168.1.8:9000/accounts/login' [POST]>)**
所以 login_required 首先使用下一个字段进行 GET 请求。然后是 POST ,没有下一个字段。所以它不能改为我的点击。
我该怎么办?
<div class="row">
<div class="col-md-3">
{{ wtf.quick_form(form, action="/accounts/login") }}
</div>
</div>
答案 0 :(得分:1)
我通过更改模板成功解决了这个问题:
<div class="row">
<div class="col-md-3">
<form
action="{{ url_for('accounts.login', next=request.args.get('next')) }}"
method="POST"
class="form"
role="form">
{{ form.hidden_tag() }}
{{ wtf.form_errors(form, hiddens='only') }}
{% for field in form %}
{% if not bootstrap_is_hidden_field(field) %}
{{ wtf.form_field(field,
form_type="basic",
horizontal_columns=('lg', 2, 10),
button_map={}) }}
{% endif %}
{% endfor %}
</form>
</div>
</div>
但是,我不确定这是最好的答案吗?