login_required装饰器在POST之前进行GET。然后邮政没有下一个'在请求中

时间:2016-03-15 04:24:35

标签: flask flask-login

我在登录视图中使用此代码:

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>

1 个答案:

答案 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>

但是,我不确定这是最好的答案吗?