flask-wtf validate_on_submit()
验证用户名和密码,validate_on_validate()返回值因为True,但是下面的代码却是False,求解答:
class LoginForm(Form):
username = StringField('Username')
password = PasswordField('Password')
submit = SubmitField('Login')
def validate_username(self, field):
if field.data != 'you':
raise ValidationError('Invalid username')
def validate_password(self, field):
if field.data != 'flask':
raise ValidationError('Invalid password')
@app.route('/', methods=['POST', 'GET'])
def login_view():
form = LoginForm()
if form.validate_on_submit():
flash('Username and password are correct')
return redirect('/')
return render_template('form.html', form = form)
如上form.validate_on_submit()返回值总是为False
我只能把代码改为:
@app.route('/', methods=['POST', 'GET'])
def login_view():
form = LoginForm()
if request.method == 'POST':
if not form.validate_on_submit():
flash('Username and password are correct')
return redirect('/')
else:
return render_template('form.html', form = form)
这样才会有用,求解答
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
问题可能是因为你的表单里StringField和PasswordField没有validators,如果表单里没有写validators的话,相当于你提交的表单内容是空,后端的form.validate_on_submit()就会一直是false。
试试这种写法
如果你的username和password需要特殊格式的话,这里validators可能不只要写Required。我的登录验证表单是这样写的
这里需要引入一些验证的包或者叫验证函数
可以参考一下这里
http://stackoverflow.com/questions/20170234/validate-on-submit-always-returns-false-using-flask-wtforms
你上面的LoginForm类继承的是Form,改一下,改为继承FlaskForm试试:
from flask_wtf import FlaskForm