1

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

基于Flask-Security 文档,我创建了一个 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'))
4

1 回答 1

2

固定的。我忘了我不需要包含已经存在的字段。

使固定:

class ExtendedRegisterForm(RegisterForm):
    name = TextField('Team Name', [DataRequired()])
    players = TextField('Players', [DataRequired()])
于 2014-08-05T02:22:31.253 回答