今天用Flask 表单,form.validate_on_submit()总是false,总算改对了,总结一下看到的解决方法
表单的地方没写{{ form.csrf_token }}
在HTML里加上就好
{{ form.csrf_token }}
{{ form.account(class="layui-input",placeholder="账号") }}
{{ form.password(class="layui-input",placeholder="密码") }}
{{ form.submit(class="layui-btn") }}
登录
定义表单时没写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"
,泪的教训啊