Python WTForms验证错误不起作用

Python WTForms验证错误不起作用,python,flask,wtforms,flask-wtforms,flask-login,Python,Flask,Wtforms,Flask Wtforms,Flask Login,我试图创建一个登录表单,如果用户名为空,它会抛出一个错误 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 = Fla

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

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代码如下所示:

<html>
<title> MY FORM </title>
<body>
<form method="POST" action="{{ url_for('form') }}">
  {{form.csrf_token}}
  {{ form.username.label }}
  {{ form.username }}
  <ul>
  {% for error in form.username.errors %}
    <li style="color: red;">{{ error }} </li>

  {% endfor %}
  </ul>
  {{ form.password }}
  {{ form.password.label }}
  <input type="submit" value="Submit">

</form>
</body>
</html>

我的表格
{form.csrf_token}
{{form.username.label}
{{form.username}
    {%form.username.errors%中的错误}
  • {{error}
  • {%endfor%}
{{form.password}} {{form.password.label}

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

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

@app.route('/form', methods=['GET','POST'])
def form():
    this_form = LoginForm()
    this_form.validate()
    return render_template('form.html', form=this_form)
另外,避免将表单命名为
form
,因为您已经将函数命名为
form
。您应该更改窗体的函数名或变量名


我希望这会有所帮助。

假设您的表单将使用POST方法发送,那么如果表单数据已提交,您必须验证表单数据。使用flask 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)
我邀请你阅读更多关于