2017-11-09 3 views
-1

現在、Sklearnモデルオブジェクトをサーバー側からクライアント側に移動しようとしています。私はジャンゴには新しいので、私は強く苦しんでいます。DjangoのHttpRequestでpickledオブジェクトを渡す

オプションは、すべてのモデルパラメータをjsonifyし、それらを渡し、それらのパラメータで新しいモデルオブジェクトを再構築することです。

しかし、単純化して、ジャンゴについて少し学ぶ私の試みでは、私はピクルされたオブジェクトを渡して失敗しています。私はシンプル

pickle.loads(api_res) 

をした場合、私は、フロントエンドAPIからそれを得た

result = pickle.dumps({'test':'test'}, pickle.HIGHEST_PROTOCOL) 
return HttpResponse(pkl) 

私は型インスタンスのエラーを取得:

私はもともとのような単純なものを試してみました。私がするとき:

pickle.loads(api_res.read()) 

それは私にEOFエラーを与える。

文字列バージョンの代わりにpickle.dumpを使用する可能性があることは知っていますが、私はちょうど途中でぎこちない言い訳をするようです。

ケーキ上の不幸なアイシングは、オブジェクトのシリアル化とdjangoでの返り値を返す人々のインスタンスを見つけることは明らかに困難です。ほとんどすべての結果は、djangoオブジェクト自体のシリアライズ/ピックリングに関するものです。

ヘルプ/リンクをいただければ幸いです。

答えて

1

ポイントゼロ:誰もあなたのpickle.loadに注射する可能性を今までに許してはいけません。 Arbitrary code execution with Python picklesを参照してください。

あなたがこれを行うことを完全に確信している場合は、フロントエンドが行っていることを確認してください。おそらく、データを何らかの形で変更したり、データをフィールドに送信することがあります。また、api_resインスタンスのクラスドキュメントをチェックしてください。

+0

サーバー側からクライアント側にスケルトンモデルオブジェクトを渡す方法について他に提案がありますか?それが最終的に私がやろうとしていることです。私たちはモデルサーバー側を訓練していますが、現在、開発者がさまざまなデータ処理のためにノートブックのクライアント側にアクセスする方法はありません。 – Lzkatz

+0

私はJSONかCBORが良い選択だと言います。オブジェクトをアンピクルするには、アーキテクチャに依存しない方法でシリアル化する必要があります。 しかし、それをノートブックに統合するのが最善の方法だとは思っていません。 – lig

関連する問題