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 

任何想法为什么发生这种情况?

回答

0

当你重定向到一个新的脚本,我认为它是与另一个HTTP请求?

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

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

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

相关问题