转:Flask 表单form.validate_on_submit()总是false的解决方法


今天用Flask 表单,form.validate_on_submit()总是false,总算改对了,总结一下看到的解决方法
表单的地方没写{{ form.csrf_token }}

在HTML <form></form>里加上就好

    <form class="layui-form" method="post">
        {{ form.csrf_token }}
        <div class="layui-input-inline">
            {{ form.account(class="layui-input",placeholder="账号") }}
        </div>
        <div class="layui-input-inline">
            {{ form.password(class="layui-input",placeholder="密码") }}
        </div>
        <div class="layui-input-inline login-btn">
            {{ form.submit(class="layui-btn") }}
            <button lay-submit lay-filter="login" class="layui-btn">登录</button>
        </div>
    </form>

定义表单时没写validators=[DataRequired()]

    account = StringField(u'账号', validators=[DataRequired()])
    password = PasswordField(u'密码', validators=[DataRequired()])
    submit = SubmitField(u'登录')

如果不写这句,form.validate_on_submit()就认为表单是空的,所以会false
这里注意如果是from flask_wtf import FlaskForm,validators里一定是DataRequired,如果是from flask_wtf import Form 那就是Required
中文编码问题

上面已经写出来了,StringField(u'账号', validators=[DataRequired()]),如果label有中文的话,一定要加Unicode,不然也会false的

 
补充,SelectField通过不了验证

最近正好又用到flask,下拉列表通过不了,先在HTML页面打印错误信息,

{{ form.like_movie1.errors[0] }}

结果是 'Not a valid choice'

这个没有找到最好的解决方法

原来的代码是

    movies = [('0', ''), ('1', u'啊啊'), ('2', u'版本'), ('3', u'猜测'), ('4', u'得到'), ('5', u'呃呃')]
    like_movie = SelectField(choices=movies, validators=[DataRequired()], coerce=int)

coerce写的是int,也确实传过来int,但是就是通过不了,改成coerce=str之后就通过验证了。。。

 

用以下方法打印错误信息,很管用

{{ form.errors }}

 

还有一点,前端form标签里一定要写method="post"

<form method="post">,泪的教训啊
————————————————
版权声明:本文为CSDN博主「six66667」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/six66667/article/details/85885583

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值