2

次のように、Flask-Login で動作するユーザー関数を作成して使用しようとしています。

class User(db.Model):
    username = db.Column(db.String(80), primary_key=True)
    passhash = db.Column(db.String(160))
    posts = db.relationship('Idea', backref='user')

    def __init__(self, username, password):
        self.username = username
        self.passhash = generate_password_hash(password)

    def __str__(self):
        return "User: " + self.username + " Hash: " + self.passhash

    # Managing passwords using Werkzeug security library
    def check_password(self, password):
        return check_password_hash(self.passhash, password)

    # Necessary functions for Flask-Login session management
    def is_authenticated(self):
        return True

    def is_active(self):
        return True

    def is_anonymous(self):
        # Anonymous users aren't supported
        return False

    def get_id(self):
        return unicode(self.username)

ただし、このコードを使用しようとすると、次のエラーが表示されます。

AttributeError: 'User' オブジェクトに属性 'is_active' がありません

メソッドを手動で実装しているにもかかわらず、この回答に出くわし、機能を からclass User(db.Model)に変更してこれを修正しようとしました。class User(db.Model, UserMixin)これを行うと上記のエラーが解消されましたが、次のことがわかり始めました。

NotImplementedError:id属性がありません - オーバーライドget_id

ここで何が間違っていますか?という名前の属性はありませんが、(上記のように) 関数idを設定しました。get_id上記の機能が取り上げられていない特定の理由はありますか?

特に myuser = User.query.get(form.username.data)を toに渡すと、エラーが発生しlogin_user()ます。

4

3 に答える 3

1

User クラスに id 列を追加する必要があります

id = db.Column(db.Integer, primary_key = True)

次に、user_loader を設定します

@login_manager.user_loader
def load_user(id):
    return User.query.filter(User.id==int(id)).first()
于 2015-08-12T10:00:02.440 に答える
1

今後の参考のために、コードの実装に問題はありませんでした。私のテキスト エディターでは、いくつかの場所でインデントとスペースが混同されていたため、奇妙なエラーが発生していたことが判明しました。

于 2015-03-23T01:43:56.063 に答える