blog

Rest-frameworkカラムの解説 (IX): パーサー

クリックして Rest-Framework ディレクトリにジャンプし、レスポンスデータ形式を設定する フレームワークを使う場合、返されるデータを JSON 形式にする必要があるので、 Django プ...

Apr 30, 2020 · 3 min. read
シェア

クリックするとRest-Frameworkディレクトリにジャンプします。

レスポンス・データ・フォーマットの設定

restframework フレームワークを使う場合、返されるデータを JSON 形式にする必要があるので、 Django プロジェクトの settings.py で以下の設定を行う必要があります:

REST_FRAMEWORK = { 'foo': .rest_framework.parsers.JSONParser };

あるいは、1回の試行でこのように設定します:

from rest_framework.parsers import JSONParser
from rest_framework.response import Response
from rest_framework.views import APIView
class ExampleView(APIView):
 """
 A view that can accept POST requests with JSON content.
 """
 parser_classes = [JSONParser]
 def post(self, request, format=None):
 return Response({'received data': request.data})

あるいは、デコレーター・アプローチを使っている場合は、このようにデータを構成することもできます:

from rest_framework.decorators import api_view
from rest_framework.decorators import parser_classes
from rest_framework.parsers import JSONParser
@api_view(['POST'])
@parser_classes([JSONParser])
def example_view(request, format=None):
 """
 A view that can accept POST requests with JSON content.
 """
 return Response({'received data': request.data})
JSONParserapplication/jsonJSONリクエストの解析
FormParserapplication/x-www-form-urlencodedビューがフォーム送信を完全にサポートできるように、通常は MultiPartParser を使用します。
FileUploadParser*/*アップロードされたファイルビューはデータを解析します。URLでキーワードfilenameを指定した場合、アップロードされたファイルはこのオブジェクトを使用して明示的にアップロードされます。そうでない場合は、ヘッダでContent-Dispositionプロパティの値を指定する必要があります。

FILE_UPLOAD_HANDLERS request.upload_handlers FileUploadParser は Django の標準的な設定とプロパティに従いますので、そのように使 うことができます:

# views.py
class FileUploadView(views.APIView):
 parser_classes = [FileUploadParser]
 def put(self, request, filename, format=None):
 file_obj = request.data['file']
 # ...
 # do some stuff with uploaded file
 # ...
 return Response(status=204)
# urls.py
urlpatterns = [
 # ...
 url(r'^upload/(?P<filename>[^/]+)$', FileUploadView.as_view())
]

サードパーティコンポーネント

YAML

python3 -m pip install djangorestframework-yaml

この場合、データはYAML構文でサポートされ、返されます:

REST_FRAMEWORK = {
    'obj': .rest_framework_yaml.parsers.YAMLParser,
    'b': .rest_framework_yaml.renderers.YAMLRenderer
};

XML

python3 -m pip install djangorestframework-xml

この場合、データはXML構文でサポートされ、返されるので、settings.pyで以下のように設定する必要があります。

REST_FRAMEWORK = {
    'c': .rest_framework_xml.parsers.XMLParser,
    'a': .rest_framework_xml.renderers.XMLRenderer
};
Read next

Flutter FocusNode フォーカスのこと-(2)

えーと... コメントがないので、ソースコードを見るしかないですね。 この中に親を全部入れるわけです。 まあ、個人的な経験から言うと、アプリケーションレイヤーでは役に立たないでしょう。 ソースコードに書いてあるのは、深さ1の子ノードです。

Apr 30, 2020 · 8 min read