Как получить или создать профиль пользователя в GAE? - PullRequest
1 голос
/ 20 марта 2012

У меня есть модель профиля:

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 ]

2 голосов
/ 20 марта 2012

Вы должны передать key_name в get_or_insert(), в этом случае, вот так:

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

Обратите внимание, что поскольку свойство user заполняется автоматически из-за auto_current_user=True, вам не нужно передавать его в вызов get_or_insert(). В вашем случае вам не нужно передавать ничего, кроме имени ключа.

1 голос
/ 01 августа 2012

Вы, вероятно, не хотите использовать db.UserProperty, по причинам, объясненным здесь .Таким образом, если пользователь меняет свой адрес электронной почты, ваш (старый) сохраненный «Пользователь» не будет сравниваться с текущим вошедшим (новым) «Пользователем».

Вместо этого сохраните пользователя.user_id () либо как StringProperty в вашей модели профиля (как показано на странице, на которую я ссылался выше), либо в качестве ключа (key_name) вашей модели профиля.Примером последнего является здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...