2012-03-19 68 views
1

我有一个剖面模型:如何在GAE中获取或创建用户配置文件?

class Profile(db.Model): 
    user = db.UserProperty(auto_current_user=True) 
    bio = db.StringProperty() 

我想在此视图中显示用户的现有生物。如果用户还没有配置文件,我想创建它。这是我迄今为止,还没有工作:

class BioPage(webapp2.RequestHandler): 
    def get(self): 
     user = users.get_current_user() 
     if user: 
      profile = Profile.get_or_insert(user=user) #This line is wrong 
      profile.bio = "No bio entered yet." 
      profile.save() 
      self.response.headers['Content-Type'] = 'text/plain' 
      self.response.out.write('Hello, ' + user.nickname() + '<br/>Bio: ' + profile.bio) 
     else: 
      self.redirect(users.create_login_url(self.request.uri)) 

如何解决上述不正确的行?我知道get_or_insert()应该有一个关键名称,但我无法弄清楚会是什么。

(应该在配置文件中的用户场均是db.UserProperty?)

回答

2

你必须通过key_nameget_or_insert(),在这种情况下,像这样:

profile = Profile.get_or_insert(key_name=user.email()) 

注意,由于user属性由于auto_current_user=True而自动填充,因此您无需将其传递给get_or_insert()调用。在你的情况下,你不需要传递任何东西,除了关键的名字。

1

您可能不想使用db.UserProperty,原因解释为here。总之,如果用户更改他/她的电子邮件地址,则(旧)存储的“用户”不会与当前登录的(新)“用户”相等。

而是将user.user_id()存储为Profile模型上的StringProperty(如上面引用的页面所示)或Profile模型的key(key_name)。后者的一个例子是here

相关问题