我应该如何序列化/引用App Engine用户?

时间:2011-05-16 21:18:36

标签: google-app-engine

这是这个问题的后续行动:

How do I correctly reference Users in GQL queries on App Engine?

在我的应用中,我有一个照片db.Model,其中每张照片都有一个UserProperty。我想显示一个用户列表,点击用户将显示所有用户的照片。

在创建指向用户照片页面的链接时引用用户的最佳方法是什么?

我找到了两个选项,都有它们的缺点。

  1. user.nickname() - 这可用于GQL查询(例如Photos.gql(“WHERE user = USER(:1)”,user.nickname())),但它可以更改,它不一定是唯一的,有时(例如对于Gmail地址)user.nickname()在'@'符号处截断,不能在没有附加“@ gmail.com”的情况下用于查找。
  2. user.user_id() - 这是唯一的,但我找不到通过user_id()
  3. 查找用户的方法

    有更好的方法吗?目前,我将用户和user_id()存储在Photo模型上,通过链接中传递的user_id进行GQL搜索,然后从Photo模型上的UserProperty引用用户。

2 个答案:

答案 0 :(得分:3)

使用user_id。除非你想获得他们的电子邮件地址和/或昵称,否则“查找”用户并不是真正有意义的操作。您应该有一个用户表,用于存储User对象,由user_id键入,以及您需要的任何其他特定于站点的信息(例如,首选项,个人资料信息)。

答案 1 :(得分:2)

我认为最好的方法是将user_id作为key_name传递并使用get_or_insert()

import models
from google.appengine.ext import db
from google.appengine.api import users
class Photo( db.Model ):
    owner = db.UserProperty()
    title = db.StringProperty()

photo = Photo(key_name=users.get_current_user().user_id())
photo.owner=users.get_current_user()
photo.title= 'hai'
photo.put()
user_id = users.get_current_user().user_id()

photo = Photo.get_or_insert(user_id)