0

我想要实现的是从 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'])

我想获取用户对象,因为它是我的一个模型的 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 > 

现在我的问题是检索用户对象的最佳方法是什么?提前感谢您的所有帮助。

神话

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”

4

3 回答 3

2

感谢您的回复,但是我已经解决了这个问题。如果您使用User模型 from webapp2_extras(这是 User model from 的扩展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)
于 2012-06-06T18:40:03.887 回答
1

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

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

于 2012-05-19T05:26:33.447 回答
0

users.get_current_user() 应该是要走的路,但这需要用户先登录。您是否尝试支持匿名用户?

于 2012-05-19T03:23:12.603 回答