【问题标题】:How to get or create user profile in GAE?如何在 GAE 中获取或创建用户配置文件?
【发布时间】:2012-03-19 20:31:34
【问题描述】:

我有一个 Profile 模型:

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 吗?)

【问题讨论】:

    标签: google-app-engine


    【解决方案1】:

    您必须将key_name 传递给get_or_insert(),在这种情况下,如下所示:

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

    请注意,由于 auto_current_user=True 会自动填充 user 属性,因此您无需将其传递给 get_or_insert() 调用。在您的情况下,除了键名之外,您不需要传递任何内容。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-14
        • 1970-01-01
        • 2015-06-24
        • 2012-11-07
        • 2016-05-16
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多