首页 文章

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

提问于
浏览
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 >

现在我的问题是检索用户对象的最佳方法是什么?在此先感谢您的帮助 .

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

    谢谢你的回复,但我已经把它推了出来 . 如果您使用 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)
    

    要么

    user = users.User(User.get_by_auth_id(self.current_user.auth_ids[0]).email)
    
  • 2

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

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

  • 1

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

相关问题