まず、ビュー関数内でリクエストの操作を判断し、適切なシリアライザを選択する方法を見てみましょう。
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['GET', 'POST'])
def my_view(request):
if request.method == 'GET':
serializer = MyGetSerializer(data=request.data)
elif request.method == 'POST':
serializer = MyPostSerializer(data=request.data)
if serializer.is_valid():
# シリアライズされたデータの処理
# ...
return Response(serializer.data)
else:
return Response(serializer.errors)
上記の例では、MyGetSerializer
とMyPostSerializer
という2つの異なるシリアライザを使用しています。GETリクエストの場合はMyGetSerializer
が、POSTリクエストの場合はMyPostSerializer
が適用されます。それぞれのシリアライザは、リクエストのデータをバリデーションし、シリアライズされたデータを返します。
また、クラスベースのビューを使用している場合も同様の方法が適用できます。以下に例を示します。
from rest_framework.views import APIView
from rest_framework.response import Response
class MyView(APIView):
def get_serializer(self):
return MyGetSerializer()
def post_serializer(self):
return MyPostSerializer()
def get(self, request):
serializer = self.get_serializer()(data=request.data)
if serializer.is_valid():
# シリアライズされたデータの処理
# ...
return Response(serializer.data)
else:
return Response(serializer.errors)
def post(self, request):
serializer = self.post_serializer()(data=request.data)
if serializer.is_valid():
# シリアライズされたデータの処理
# ...
return Response(serializer.data)
else:
return Response(serializer.errors)
上記の例では、MyGetSerializer
とMyPostSerializer
を返すメソッドを定義しています。GETリクエストとPOSTリクエストのそれぞれのメソッド内で、適切なシリアライザを取得し、処理を行います。
これらの例は、DjangoのREST Frameworkを使用していますが、一般的なDjangoの場合でも同様のアプローチが適用できます。
このように、操作に応じて複数のシリアライザを使用する方法を紹介しました。これにより、異なるリクエストに対して適切なバリデーションとシリアライズが行えます。