私はDjango RESTフレームワークの初心者であり、あなたの助言が必要です。私はWebサービスを開発しています。サービスは、他のサービスにRESTインタフェースを提供する必要があります。私が実装する必要があるRESTインターフェースは、私のモデルで直接動作していません(get、put、post、delete操作を意味します)。代わりに、いくつかの計算結果を他のサービスに提供します。要求に応じて、私のサービスはいくつかの計算を行い、結果を返すだけです(結果は独自のデータベースに保存されません)。Django RESTフレームワーク:非モデルシリアライザ
以下は、RESTインターフェイスを実装する方法を私が理解したものです。私が間違っているなら、私を訂正してください。
- 計算を行うクラスを作成します。名前を 'CalcClass'とします。 CalcClassはそのモデルをその作業に使用します。
- 計算に必要なパラメータはコンストラクタに渡されます。
- calc演算を実装します。 ResultClassとして結果を返します。
- 結果クラスを作成します。
- オブジェクトから派生したものです。
- これは、calcの結果を含む属性しか持っていません。
- 計算結果の一部は、タプルのタプルとして表されます。私が理解するように、それ以上のシリアライゼーションでは、それらの結果に対して別のクラスを実装し、そのようなオブジェクトのリストをResultClassに追加する方がよいでしょう。
- ResultClassのシリアライザを作成します。
- シリアライザから派生します。
- 計算結果は読み取り専用です。したがって、IntegerFieldなどの特殊なクラスではなく、フィールドのほとんどがフィールドクラスを使用します。
- 私は結果を格納するつもりはないので(私はちょうど要求に応じて返したい)、ResultClassとSerializerのどちらにもsave()メソッドを含めるべきではありません。
- ネストされた結果のImplシリアライザ(上記のタプルのタプルを覚えておいてください)。
- 計算結果を返すには、ビューを作成します。
- APIViewから派生します。
- get()が必要です。
- get()リクエストから取得したparamsでCalcClassを作成し、calc()を呼び出してResultClassを取得し、シリアライザを作成してResultClassを渡し、Response(serializer.data)を返します。
- のURL
- 私の場合には、APIのルートがありません。私はさまざまな計算結果(diffパラメータを持つcalc)を得るためのURLを用意してください。
- apiの閲覧にformat_suffix_patternsを呼び出します。
私は何かを見逃しましたか?アプローチは一般的に正しいですか?
こんにちはガブリエル!あなたの答えをありがとう!私はすでに私の計画に従って必要なものを実装しました。正常に動作します!私はより良いjson出力のためにシリアライザを使用しました。 – Zakhar
ありがとう、私の一日を救った。それはドキュメンテーションの一部でなければなりません。 – neelix
私はこの提案に従おうとしましたが、次のように表示されます。 "DjangoModelPermissionsを' .model'または '.queryset'プロパティを持たないビューに適用することはできません。"私は提供された正確な例を試しました。 django-rest-frameworkの最近のバージョンでは何かになりますか? – Orlando