今天用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