29
2020-06

flask_wtf提交表格validate_on_submit返回False解决方案

使用flask_wtf,如下:

python文件:

class SiteForm(FlaskForm):
    site_name = StringField(u'网站名称', validators=[DataRequired()],
                            render_kw={"class_":"form-control","placeholder":"请输入网站名称"})
                            
class SiteConfigView(BaseView):
    @expose('/', methods=('GET', 'POST'))
    def site_info(self):     
        form = SiteForm()
        if form.validate_on_submit():            
            flash('设置更新成功!')
        else:
            print('invalidate submit')
        
        return self.render('admin/site_info.html', form=form)

HMTL模板:

<form action="" method="POST" >
    <div class="form-group">
        <label for="site_name" >{{ form.site_name.label }}</label>
        <div class="col-md-10">
            {{form. site_name }}
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10 submit-row">
            <input type="submit" class="btn btn-primary"/>       
        </div>
    </div>
</form>


提交表单打印提示"invalidate submit",也就是form.validate_on_submit()总返回False

from.validate_on_submit()  等价于   request.method==' post '  and  from.validate(),理论上验证通过后提交表单后应该是True。

打印form.errors错误提示:

invalidate  submit

{'csrf_token': ['The CSRF token is missing.']}

原来是 启用了CSRF token保护验证:CsrfProtect(app)#app项目加载CsrfProtect

所以把{{ form.csrf_token }}加到HMTL模板的form里的就好了:

<form action="" method="POST" >
    {{ form.csrf_token }}
    <div class="form-group">
        <label for="site_name" >{{ form.site_name.label }}</label>
        <div class="col-md-10">
            {{form. site_name }}
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10 submit-row">
            <input type="submit" class="btn btn-primary"/>       
        </div>
    </div>
</form>


« 上一篇

相关文章:

留言列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。