【问题标题】:WTForms validation error not workingWTForms 验证错误不起作用
【发布时间】:2017-11-16 13:24:34
【问题描述】:

我正在尝试创建一个登录表单,其中如果用户名为空,则会引发错误。

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>

显然,for 循环被跳过,并且在用户字段为空时单击提交按钮没有任何反应

【问题讨论】:

    标签: python flask wtforms flask-wtforms flask-login


    【解决方案1】:

    假设您的表单将使用 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)
    

    我邀请您阅读有关flask-wtf的更多信息

    【讨论】:

      【解决方案2】:

      您根本没有在 form 函数中验证表单。编辑函数并添加验证行。验证后才发现错误。否则,模板中的form 变量将没有错误属性。应该这样做:

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

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

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-18
        • 2014-01-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多