我想要实现的是从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()”方法也返回“无”
答案 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()应该是要走的路,但这需要用户先登录。 您是否尝试支持匿名用户?