0

我无法在会话中检索已动态添加到数据存储对象的属性。这是一个(简化的)示例...为了节省建议时间,我不想将属性实际硬编码到数据存储对象。

Class User(ndb.Model):
   email = ndb.String...


// I use a handler to get the user object from the datastore 
// and store the object in session
user = function_to_get_user_by_key(key)

// Add an temporary attribute
user.temp_var = 'test'

// Store in session
self.session['user'] = user

// Get the user in the same script to test the attribute
user = self.session.get('user')

print user.temp_var // Works - I see the result


// Redirect to a new script (By the way, assume these scripts are in separate methods       within a handler class)

user = self.session.get('user')
print user.temp_var // Gives an attribute error - basically saying the class does not have this attribute

知道为什么会这样吗?

4

1 回答 1

0

当您重定向到一个新脚本时,我假设它是另一个 HTTP 请求?

在新请求中,您将使用会话对象的新实例。在您的请求之间,您的会话将被序列化并保存到内存缓存或数据存储中。根据您的新请求,您将反序列化您的会话。

您可能想检查序列化的过程以及您的用户对象未按预期序列化的原因。User 类很可能有自己的基于 Kind 属性的序列化代码,并且 temp_var 可能会被序列化忽略,因为它不是类的一部分。

您也可以将 temp_var 直接放在会话中,在这种情况下,它应该正确序列化。

于 2013-04-23T17:43:01.047 回答