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 リクエストを使用していると思いますか?

新しいリクエストでは、セッション オブジェクトの新しいインスタンスを使用します。リクエスト間で、セッションはシリアル化され、memcache またはデータストアに保存されます。新しいリクエストでは、セッションを逆シリアル化しています。

シリアル化がどのように行われたか、およびユーザー オブジェクトが期待どおりにシリアル化されなかった理由を確認することをお勧めします。ほとんどの場合、User クラスには Kind 属性に基づく独自のシリアル化コードがあり、temp_var はクラスの一部ではないため、シリアル化によって無視される可能性があります。

temp_var をセッションに直接配置することもできます。その場合、適切にシリアル化する必要があります。

于 2013-04-23T17:43:01.047 に答える