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