2016-09-08 4 views
1

私は、クライアント側でユーザから与えられたすべての回答に対して呼び出されなければならないオブジェクトモデルを持っています。しかし、問題はユーザーが答えをクリックするたびに私のビューが実行され、オブジェクトは再び初期化されます。だから私は別の別のビューでセッション内のオブジェクトインスタンスを作成し、同じインスタンスを何度も何度も再利用することを考えました。djangoを使ってセッションでオブジェクトのインスタンスを作成する方法は?

しかし、それは私にこのスロー:私はジャンゴを使用してセッションでインスタンスを作成する方法の助けを必要と

request.session['qn_obj'] = question_class() 
    objects not JSON serializable 

enter image description here

を。

答えて

1

djangoのセッションはサーバーメモリに格納されないため、純粋なオブジェクトを含むことはできません。それらは、いくつかのストレージバックエンド(データベース、キャッシュ、ユーザークッキーなど)に格納できる文字列にシリアル化されています。

デフォルトでは、djangoはセッション用にJSONシリアライザを使用します。 JSONシリアライザはオブジェクトをシリアル化できません。

もう一つのシリアライザがdjango:pickleに組み込まれています。 Pythonで作成できるものはほとんど何でもシリアル化できますが、いくつかの欠点があります。より遅く、信頼できないセッションストレージ(クッキーなど)と一緒に使用すると、重大なセキュリティ違反になる可能性があります。攻撃者はシリアル化されたデータを交換するだけで、任意のコードを実行できます。詳細については、Django docsを参照してください。

また、デシリアライズ時のピクルは、シリアル化されたときからオブジェクト状態を再作成しようとします。このオブジェクトは単にメモリ内に保持されるわけではないので、ピクルスからデシリアライズすることは、以前と同じように、最初から再作成するよりも優れています。

+0

私はそれを作成状態にデシリアライズするのではなく、最後に更新した状態にします。どうすればこれを達成できますか? – Yogi

+0

私は実際にセッションオブジェクトを更新できますか?出来ますか ? :) – Yogi

関連する問題