2013-03-23 51 views
4

我是很新的python web-dev,我有flask + wtforms應用程序。我可以在登錄看到()存儲 用戶對象瓶頸:如何檢索會話數據?

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 

回答

7

很簡單。如果您想要檢索特定的對象,只需在會話中添加變量的名稱,例如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('.....') 
+0

如何檢索,如果它的對象?請檢查上面的編輯代碼部分。 'user'是一個有user.uid,user.logins和user.nickname成員的對象 – 2013-03-23 20:31:42

+0

非常感謝,明白了。使用你的第一種方法。不用擔心物體和類似的東西。將暱稱存儲爲會話變量而不是對象。謝謝您的幫助。 – 2013-03-23 20:41:02

+1

不用擔心。順便說一句,出於安全原因,最好將最少量的信息存儲在會話中。我將所有權限等存儲在數據庫中。 – eandersson 2013-03-23 20:41:43