【发布时间】:2011-11-29 22:48:58
【问题描述】:
我正在尝试在我自己的 User 类中使用应用引擎 User 对象的 user_id(由 User.user_id() 方法返回)作为 key_name。问题是它一直告诉我这是一个无效的 key_name。我试过 sha2'ing 它,并使用 digest() 和 hexdigest() 方法来减少可能的字符数,但仍然没有好的结果。这是因为值太长,还是因为键名不能包含某些字符?而且,如何修改 user_id 以使其保持唯一,但也可用作实体的 key_name?如果它使用哈希,则额外奖励,这样用户 ID 就不会被猜到。
这是发生错误的代码:
def get_current_user():
return User.get(db.Key(hashlib.sha1(users.get_current_user().user_id()).hexdigest()))
我现在正在做更多的测试,考虑来自 cmets 的建议和答案。
【问题讨论】:
-
你的用户类中的Key_name是你的用户类的PK吗?
-
我相信有效的键名包括最多 500 个字符的任何 Unicode 字符串。
user_id()或哈希当然应该是完全有效的。我怀疑您的代码中还有其他问题。您确定要设置密钥名称,而不是密钥本身吗? -
此时,我什至没有设置密钥。我正在尝试从不存在的数据库中获取用户。我只是为我自己的用户模块实现 get_current_user 方法。我会将它的代码添加到问题中。
-
请注意,如果您包含错误的堆栈跟踪,而不是对其进行解释,那么问题所在会立即显而易见。
标签: google-app-engine entity key