2012-05-18 48 views
0

我試圖實現的是從webapp2.cached屬性獲取用戶對象。 我有我的請求處理程序中定義的方法,它給了我當前的用戶。Google App Engine:從Webapp2獲取用戶對象緩存屬性(current_user)

@webapp2.cached_property 
    def current_user(self): 
    user_dict = self.auth.get_user_by_session() 
    return self.auth.store.user_model.get_by_id(user_dict['user_id']) 

我想要得到的用戶對象,因爲它是我的車型之一的UserProperty(),這是如下:

class CountryImage(db.Model): 
    image = db.BlobProperty() 
    user = db.UserProperty() 
    country = db.ReferenceProperty(Country) 
    approved = db.BooleanProperty(default=False) 

現在,當上傳表單張貼,一切工作只是罰款對於數據存儲區中顯示爲「無」的「用戶」。

當我在交互式控制檯中使用它時發現的可能的原因是 current_user傳遞一個Web緩存屬性,而不是實際的用戶對象。

例如:

< webapp2.cached_property object at 0xb46aee8c > 

現在我的問題是什麼是檢索用戶對象的最佳方式是什麼?預先感謝您的幫助。

Amyth

PS:編輯:

以下就是我試圖將圖像存儲在數據存儲中的代碼:

NewImg = models.CountryImage() 
NewImg.image = self.request.get('image') 
NewImg.user = self.current_user 
NewImg.country = models.Country.all().filter("url_name =", country).get() 
continue_url = self.request.url 
NewImg.put() 

PS:

我想補充我也嘗試使用「users.get_current_user()」方法,它也返回「無」

回答

2

感謝您的答覆,但我已經soved這已經。如果您使用的是從webapp2_extrasUser模型(這是一個擴展,從appengine.api.users用戶模型),你可以得到用戶如下

from google.appengine.api import users 
from webapp2_extras.appengine.auth.models import User 

user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).name) 

user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).email) 
0

users.get_current_user()應該是最好的方式,但這需要用戶首先登錄。 您是否試圖支持匿名用戶?

+0

沒有,但是我們有自定義會話處理等等函數返回None – Amyth

+0

在這種情況下,對於用戶對象,您不能使用UserProperty,因爲這僅適用於Google Users API返回的用戶對象,它看起來像您要麼沒有使用,要麼通過禁用您的自定義會話。您需要切換並使用Google用戶API,或者使用其他方式將用戶存儲在您的CountryImage模型中 - 即作爲用戶標識的字符串,或者存儲在數據存儲中的任何用戶對象的ReferenceProperty。 – dragonx

+1

我們使用webapp2_extras中的用戶模型,我認爲它是Google用戶API的擴展,因爲新的自定義用戶也被保存在數據存儲的同一個表中。 – Amyth

1

我很好奇,國家形象,是由用戶上傳?還是你管理這些資源?

如果沒有,你可能會更好地使用StringProperty用戶模型,然後引用靜態圖片資源的路徑字符串,並保存自己額外的數據庫查詢

+0

是Gregory,用戶正在上傳這些圖片 – Amyth

相關問題