2016-07-11 4 views
0

CreateAPIViewからDjango RESTフレームワークにモデルシリアライザを継承したビューがあります。Django RESTフレームワークでPOST要求の応答を変更する場所

リクエストを送信すると、作成されたオブジェクトのJSON表現が返されます。

私は、以下のように応答からデータをラップしたいと思います:

{'data' : { 'field1' : 'value1' , 
       'field2' : value2 , 
       etc..... 
      } , 
'errors' : None , 
'message': [{} , {}] , 
'result' : 'OK' , 
} 

はどこに返されるデータを変更するのに最適な場所ですか?

私はこの質問に示されているようにカスタムレンダラを作成しようとしました:Adding root element to json response (django-rest-framework)しかし、それは決して呼び出されません。 これは投稿ではなくGETリクエストにのみ関連するためですか?

答えて

1

私は、この構造は非常に関連しないと思われる:

  1. は結果:なぜ要求のステータスコードがあなたにこの情報を提供するためにここにあるので、OKを言うためにフィールドを含める:200 - > OK 、201 - >作成、400 - >悪い要求など...
  2. データエラーは同じ応答では意味がありません。たぶん、あなたはシリアライザの方法で特別な動作をしていますが、エラーがある場合、返信するデータがない(おそらく私は間違っています)と思われます。 DRFは、あなたが.is_valid()方法でデータを検証することができ、あなたは、単に(例えば)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 

または直接.is_valid(raise_exception=True)で例外を発生させてエラーを送り返すことができます。

しかし、この構造を保持したい場合は、このジョブを自分の視点で行うことができます。例:

return Response({ 
    'data': serializer.data, 
    'errors': serializer.errors, # `.is_valid()` must be called 
    'message': [{} , {}], 
    'result':'OK' 
}) 
+0

私は一種の同意だが、実装するよう求められたものだ。 –

+0

よろしいですか?だから私が言ったように、あなたの見解でこの仕事をしてください。この構造体を長い時間使用する場合は、渡されたシリアライザに応じてこの構造体を構築するためのヘルパ関数を作成することができます。 :) –

+0

セールスフォースと話をしています。これはすべてのラウンドで作業するのが面倒です。すべてが、必要以上に努力を要します。 –

関連する問題