15

私はflask+wtformsアプリケーションを持っています。login()で次のように保存されたユーザーオブジェクトを確認できます

  if user:
   if user.verify_password(form.password.data):
    flash('You have been logged in')
    user.logins += 1

    db.session.add(History(user.uid))
    db.session.commit()

    session['user'] = user

今、私はユーザーを取得したかった

if 'user' in session:
       User=session.get('user')
       print User.nickname ###<< how to retrieve specific object member?

次のようなメッセージで失敗します:

Instance <User at 0x8e5a64c> is not bound to a Session; attribute refresh operation cannot proceed
4

2 に答える 2

17

簡単だ。特定のオブジェクトを取得する場合は、セッション内に変数の名前を追加するだけですsession['nickname']

を実行することにより、同じ方法で変数を設定できますsession['nickname'] = nickname

あなたの場合、あなたはそれを次のように変更します

if 'user' in session:
    user = session['user']
    print user

if 'nickname' in session:
    nickname = session['nickname']
    print nickname

これは、私がログインに使用する関数の簡略版です。

@app.route('/login', methods=['POST'])
def login():
    """Authenticate User"""
    username = request.form['username'].strip()
    nickname = request.form['nickname'].strip()
    password = request.form['password']
    try:
        if Auth().VerifyLogin(username, password):
            session['username'] = username
            session['nickname'] = nickname
        else:
            # failed to login, do something.
    except Exception as why:
        app.logger.critical('.....')
于 2013-03-23T20:23:53.170 に答える
0

セッションにあるすべてを表示するには、次のことができprint(session)ます。次のような応答があります

<SecureCookieSession {'_flashes': [('info', 'Duplication is not allowed ')], 'el1-s': 'Physics', 'el1grade-s': 'B2', 'el2-s': 'E-Maths', 'el2grade-s': 'A1', 'english-s': 'A1', 'mathematics-s': 'A1', 'science-s': 'A1', 'social-s': None}>

于 2022-02-17T10:51:30.200 に答える