我試圖實現的是從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()」方法,它也返回「無」
沒有,但是我們有自定義會話處理等等函數返回None – Amyth
在這種情況下,對於用戶對象,您不能使用UserProperty,因爲這僅適用於Google Users API返回的用戶對象,它看起來像您要麼沒有使用,要麼通過禁用您的自定義會話。您需要切換並使用Google用戶API,或者使用其他方式將用戶存儲在您的CountryImage模型中 - 即作爲用戶標識的字符串,或者存儲在數據存儲中的任何用戶對象的ReferenceProperty。 – dragonx
我們使用webapp2_extras中的用戶模型,我認爲它是Google用戶API的擴展,因爲新的自定義用戶也被保存在數據存儲的同一個表中。 – Amyth