Google App Engine:从Webapp2缓存属性获取用户对象(current_user)

时间:2012-05-18 16:53:16

标签: 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'])

我想获取用户对象,因为它是我的一个模型的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()”方法也返回“无”

3 个答案:

答案 0 :(得分:2)

感谢您的回复,不过我已经知道了。如果您使用User webapp2_extras模型(来自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)

答案 1 :(得分:1)

我好奇,国家形象,是用户上传的吗?或者你作为资源管理这些?

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

答案 2 :(得分:0)

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