Google app engine Google应用程序引擎:从Webapp2缓存属性获取用户对象(当前用户)

Google app engine Google应用程序引擎:从Webapp2缓存属性获取用户对象(当前用户),google-app-engine,webapp2,Google App Engine,Webapp2,我试图实现的是从webapp2.cached属性获取用户对象。 我在请求处理程序中定义了一个方法,该方法为我提供了当前用户 @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']) 我想获取User对象,因为它是我的一个模型的

我试图实现的是从webapp2.cached属性获取用户对象。 我在请求处理程序中定义了一个方法,该方法为我提供了当前用户

@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'])
我想获取User对象,因为它是我的一个模型的UserProperty(),如下所示:

class CountryImage(db.Model):
  image = db.BlobProperty()
  user = db.UserProperty()
  country = db.ReferenceProperty(Country)
  approved = db.BooleanProperty(default=False)
现在,当上传表单发布时,除了“user”在数据存储中显示为“None”之外,一切都正常

我在互动控制台中玩它时发现的可能原因是 当前用户传递web缓存属性而不是实际用户对象的方法

例如:

< webapp2.cached_property object at 0xb46aee8c > 
附言:

我还尝试使用“users.get\u current\u user()”方法,该方法也会返回“None”

用户。get\u current\u user()应该是一种方法,但这需要用户先登录。 您正在尝试支持匿名用户吗?

用户。应该使用get\u current\u user()方法,但这需要用户先登录。
你想支持匿名用户吗?

我很好奇,这个国家的图片是由用户上传的吗?或者,您是否将其作为资源进行管理


如果没有,您最好在用户模型上使用StringProperty,然后引用静态图像资源的字符串路径,并保存额外的数据库查找

我很好奇,国家/地区图像是由用户上传的吗?或者,您是否将其作为资源进行管理


如果没有,您最好在用户模型上使用StringProperty,然后引用静态图像资源的字符串路径,并保存额外的db查找

谢谢您的回答,不过我已经解决了这个问题。如果您使用的是
webapp2_extras
中的
User
模型(这是
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)


谢谢你的回复,不过我已经解决了这个问题。如果您使用的是
webapp2_extras
中的
User
模型(这是
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)


不,但是我们有自定义会话处理,因此函数返回none在这种情况下,对于用户对象,您不能使用UserProperty,因为这仅适用于googleusers API返回的用户对象,看起来您要么没有使用,要么通过自定义会话禁用。您需要切换并使用Google用户API,或者使用另一种方式将您的用户存储在您的CountryImage模型中-即作为用户ID字符串,或者是存储在数据存储中的任何用户对象的引用属性。我们使用的是webapp2_extras中的用户模型,我认为这是Google Users API的扩展,因为新的自定义用户也保存在数据存储中的同一个表中。我不知道webapp2_extras的情况,但仔细看一下,cached_property.current_user是方法,因此可能只是语法错误NewImg.user=self。current_user()使用self.current_user()会引发错误“user object is not callable”Nope,但是我们有自定义会话处理,因此函数返回none在这种情况下,对于用户对象,您不能使用UserProperty,因为这只适用于GoogleUsersAPI返回的用户对象,看起来您要么没有使用,要么通过自定义会话禁用。您需要切换并使用Google用户API,或者使用另一种方式将您的用户存储在您的CountryImage模型中-即作为用户ID字符串,或者是存储在数据存储中的任何用户对象的引用属性。我们使用的是webapp2_extras中的用户模型,我认为这是Google Users API的扩展,因为新的自定义用户也保存在数据存储中的同一个表中。我不知道webapp2_extras的情况,但仔细看一下,cached_property.current_user是方法,所以可能只是语法错误NewImg.user=self.current_user()使用self.current_user()会引发错误“用户对象不可调用”
user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).email)