【问题标题】:Google App Engine : Get User Object from Webapp2 Cached Property (current_user)Google App Engine:从 Webapp2 缓存属性 (current_user) 获取用户对象
【发布时间】:2012-05-18 16:53:16
【问题描述】:

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

【问题讨论】:

    标签: google-app-engine webapp2


    【解决方案1】:

    感谢您的回复,但是我已经解决了这个问题。如果您使用来自webapp2_extrasUser 模型(这是来自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,然后引用静态图像资产的字符串路径并为自己节省额外的数据库查找

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 不,但是我们有自定义会话处理,所以函数返回 None
        • 在这种情况下,对于用户对象,您不能使用 UserProperty,因为这仅适用于 Google 用户 API 返回的用户对象,看起来您要么没有使用,要么您通过您的自定义会话重新禁用。您要么需要切换并使用 Google 用户 API,要么使用其他方式将用户存储在 CountryImage 模型中 - 即作为用户 ID 的字符串,或作为您存储在数据存储中的任何用户对象的 ReferenceProperty。跨度>
        • 我们正在使用来自 webapp2_extras 的用户模型,我认为这是对 Google 用户 API 的扩展,因为新的自定义用户也被保存在数据存储区的同一个表中。
        • 我不知道webapp2_extras,但仔细看,cached_property.current_user 是方法,所以可能只是语法错误 NewImg.user = self.current_user()
        • 使用 self.current_user() 会引发错误“用户对象不可调用”
        猜你喜欢
        • 2015-07-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-13
        • 2011-02-12
        • 1970-01-01
        • 2011-10-10
        • 2017-04-20
        • 1970-01-01
        相关资源
        最近更新 更多