Flask-wtf 表单验证意外激活

Flask-wtf form validation unexpectedly activated

我正在努力修改 cookiecutter Flask 应用程序。

我的表格如下所示:

<form class="form-inline" id="registerForm"  method="POST" action="/register/" role="form">
          <div class="form-group">
            <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Enter your email address">
          </div>
          <button type="submit" class="btn btn-warning btn-lg">Submit!</button>
        </form>             

和一个 'user' 模型,看起来像:

class User(UserMixin, SurrogatePK, Model):

    __tablename__ = 'users'
    username = Column(db.String(80), unique=True, nullable=True)
    email = Column(db.String(80), unique=True, nullable=False)
    #: The hashed password
    password = Column(db.String(128), nullable=True)
    created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
    first_name = Column(db.String(30), nullable=True)
    last_name = Column(db.String(30), nullable=True)
    active = Column(db.Boolean(), default=False)
    is_admin = Column(db.Boolean(), default=False)
    confirmed = db.Column(db.Boolean, nullable=False, default=False)
    confirmed_on = db.Column(db.DateTime, nullable=True)

    def __init__(self, username, email, password=None, **kwargs):
        db.Model.__init__(self, username, email=email, **kwargs)
        if password:
            self.set_password(password)
        else:
            self.password = None

我的计划是只要求提供电子邮件,验证它,然后在用户验证并登录后让用户填写其余字段。所以我希望创建整个对象,但只首先,电子邮件字段已填满。当我通过仅提交电子邮件来测试电子邮件注册表单(上面的html)时,我得到了屏幕截图。我知道千篇一律使用用 flask-wtf 构建的表单,但我不确定为什么要激活此表单验证。为什么我的做法不对?

从源码可以知道:user.py

class RegisterForm(Form):
    username = TextField('Username', validators=[DataRequired(), Length(min=3, max=25)])
    first_name = TextField('first_name', validators=[DataRequired(), Length(min=3, max=25)])
    last_name = TextField('last_name', validators=[DataRequired(), Length(min=3, max=25)])
    email = TextField('Email', validators=[DataRequired(), Email(), Length(min=6, max=40)])
    password = PasswordField('Password', validators=[DataRequired(), Length(min=6, max=40)])
    confirm = PasswordField('Verify password', [DataRequired(), EqualTo('password', message='Passwords must match')])

你可以看到有六个字段,而且都是required(通过DataRequired验证器),这就是你看到六个错误的原因留言。

注意cookiecutter-flask只给了你基本的结构,你需要自己修改一些文件。