WTForms验证错误不起作用

2024-05-03 08:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个登录表单,如果用户名为空,它将抛出一个错误。在

from flask import Flask, render_template
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, BooleanField
from wtforms.validators import InputRequired, Email, length, ValidationError

app = Flask(__name__)
app.config['SECRET_KEY'] = 'This is a secret'
class LoginForm(FlaskForm):
  username = StringField('username', validators=[InputRequired()])
  password = PasswordField('password')

@app.route('/form', methods=['GET','POST'])
def form():
  form=LoginForm()
  return render_template('form.html', form=form)


if __name__== '__main__':
  app.run(debug=True)

html代码如下:

^{pr2}$

显然,for循环被跳过,当user字段为空时,单击submit按钮不会发生任何事情


Tags: namefromimportformappflasktemplaterender
2条回答

假设表单将使用POST方法发送,则必须验证表单数据是否已提交。使用烧瓶wtf非常简单:

@app.route('/form', methods=['GET','POST'])
def check_form():
    form = LoginForm()
    if form.validate_on_submit():
        # do something
        return # something 
    return render_template('form.html', form=form)

我邀请您阅读更多关于flask-wtf

您根本没有在form函数中验证表单。编辑函数并添加验证行。在验证之后,才发现错误。否则,模板中的form变量将没有errors属性。应采取以下措施:

@app.route('/form', methods=['GET','POST'])
def form():
    this_form = LoginForm()
    this_form.validate()
    return render_template('form.html', form=this_form)

另外,避免将表单命名为form,因为您已经命名了函数form。您应该更改窗体的函数名或变量名。在

我希望这有帮助。在

相关问题 更多 >