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