4

私は Django ベースの Web サービスに取り組んでおり、シリアル化を行う最善の方法を見つけようとしています。

ただし、トリッキーな要件は、応答の形式とそれに含まれるフィールドをほぼ完全に制御したいということです。

たとえば、Django シリアライザー (残念ながらwadofstuff シリアライザーが含まれています) は、フィールドを で自動的にラップします{ model: "app.Model", pk: 42, fields: { ... }}。これは、フィクスチャの作成には適していますが、私にはあまり適していません。出力を完全に制御したいのです。

さらに、たとえば、QuerySetまたはManyToManyField.

現在、django-pistonのemitters.pyを使用することを考えてますが、django-pistonでの私の経験は平凡なものでしかないので、他のオプションがあるかどうかを確認したいと思います.

では、カスタマイズ可能な Django シリアライザーの他のオプションはありますか?

ª: まばらに文書化され、テストされており、シリアライザーにいくつかの問題がありました。

4

3 に答える 3

1

ジャンゴピストンを見たことがありますか?これを簡単にするために、たくさんのものが必要です。

(特にシリアル化についてはわかりませんが、Django RESTy Web サービスです。)

于 2010-06-16T17:34:01.843 に答える
1

カスタムシリアライゼーションが非常に速く必要で、私のケースではデシリアライゼーションが必要ない場合は、リスト/クエリセット/オブジェクトから必要なフォーマットを作成できるdjangoテンプレートを作成するだけです. その後、適切なコンテキストで render_to_string を呼び出すことができ、データをシリアル化できます。

更新: いくつかの短い例

datatables.net pluginで受け入れられる json 形式を取得したいとします。いくつかの特別なパラメーターが必要なため、simplejson または sth を使用してクエリセットをシリアル化することは、ここでは不可能です (または、少なくともそれほど簡単ではない可能性があります)。このような構造を提供する最速の方法は、次のような単純なテンプレートを作成することであることがわかりました。

{
    "sEcho": {{sEcho}},
    "iTotalRecords": {{iTotalRecords}},
    "iTotalDisplayRecords": {{iTotalDisplayRecords}},
    "aaData":[
    {% for obj in querySet %}
    [
        "{{obj.name}}",
        "{{obj.message|truncatewords:20}}",
        "<a href=\"{% url some_view obj.id %}\">{{obj.name}}</a>"
    ]
    {% if not forloop.last %}
    ,
    {% endif %}
    {% endfor %}
    ]
}

これは、探していた美しい json にレンダリングされます。また、フォーマットを完全に制御できます。その他の利点は、組み込みの django フィルターを使用してオブジェクト フィールドを変更できることです。

これは書籍で説明されているシリアル化ではないことはわかっていますが、オブジェクトをカスタム形式に変換したい場合は、このソリューションが最速のソリューションになる可能性があります。何らかの理由で、django 開発者はテンプレートを html だけでなく任意の形式にレンダリングすることを許可されているので、それを使用しないのはなぜですか?

上記の例は非常に具体的ですが、他の形式を生成することもできます。もちろん、この形式からオブジェクトを復元できるデシリアライザーを作成するのは面倒かもしれませんが、それが必要ない場合は...

于 2010-06-16T17:35:24.550 に答える
1

編集 :

https://bitbucket.org/sebpiq/any2any/で公開中


私は現在、Django 用のフル機能のシリアル化フレームワークを作成しています。目的は、シリアライゼーションを完全に制御することです。それはおそらくあなたの要件をかなりうまく満たすでしょう!ただし、まだ準備ができていません。1 週間か 2 週間で、最初のバージョンをリリースできると思います。

あなたはまだグーグルコードをチェックすることができます:http://code.google.com/p/django-serializable/、それに興味があれば助けを与えることさえできます。

最初のリリースがリリースされると、注目のダウンロードがあります。

于 2010-06-22T11:28:36.037 に答える