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를 넣을 수도 있습니다.이 경우 제대로 직렬화해야합니다.