Flask-Security:自定义注册表单无法正确验证

时间:2014-08-04 04:00:45

标签: flask flask-login flask-security

我有一个使用Flask-Security的应用程序,用户需要输入有关注册的其他信息。

基于the Flask-Security documentation我创建了一个ExtendedRegisterForm:

class ExtendedRegisterForm(RegisterForm):
    email = TextField('Email Address', [DataRequired()])
    password = PasswordField('Password', [DataRequired()])
    retype_password = PasswordField('Retype Password', [DataRequired()])
    name = TextField('Team Name', [DataRequired()])
    players = TextField('Players', [DataRequired()])

并将其添加到安全性初始化中:

security = Security(app, user_datastore, register_form=forms.ExtendedRegisterForm)

我还更新了我的模板以包含其他字段:

{{ register_user_form.hidden_tag() }}
{{ render_field_with_errors(register_user_form.email, class_="form-control") }}
{{ render_field_with_errors(register_user_form.password, class_="form-control") }}
{% if register_user_form.password_confirm %}
        {{ render_field_with_errors(register_user_form.password_confirm, class_="form-control") }}
{% endif %}
{{ render_field_with_errors(register_user_form.name, class_="form-control") }}
{{ render_field_with_errors(register_user_form.players, class_="form-control") }}
{{ render_field(register_user_form.submit,  class_="btn btn-default") }}

我遇到的问题是,当用户输入所有信息并点击提交时,页面会刷新并且密码会消失,但不会出现验证错误。我可以在我的烧瓶日志中看到它已正确发出POST请求,但似乎Flask-Security没有正确接收它。

如果我在表单中删除了DataRequired()验证,那么Flask-Security将接受POST请求,但在向数据库添加新帐户之前不再检查是否存在具有该电子邮件的帐户。

之前有没有人遇到过此问题,或者您对如何解决此问题有任何建议?

干杯, 约翰

编辑:这是我的模特:

class Team(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    email = db.Column(db.String(120), unique = True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    name = db.Column(db.String(64), index = True, unique = True)
    players = db.Column(db.String(255))
    last_password_time = db.Column(db.DateTime)
    events = db.relationship('Event', secondary=events,
        backref=db.backref('teams', lazy='dynamic'))
    roles = db.relationship('Role', secondary=roles_users,
        backref=db.backref('teams', lazy='dynamic'))

1 个答案:

答案 0 :(得分:2)

固定。我忘了我不需要在那里添加字段。

修正:

class ExtendedRegisterForm(RegisterForm):
    name = TextField('Team Name', [DataRequired()])
    players = TextField('Players', [DataRequired()])