DRFチュートリアルを読んでわかったことをメモする
Tutorial 2: Requests and Responses
参照:https://www.django-rest-framework.org/tutorial/2-requests-and-responses/
RequestオブジェクトがDRFでは少し異なるらしい。
request.dataが使える。ResponseオブジェクトもDRFでは少し異なるらしい。return Response(data)のように使うらしい。
@api_viewはfunction based viewのためのもので、APIViewはclass-based viewのためのものである。@api_viewやAPIViewを使うとRequestオブジェクトもResponseオブジェクトも少々変わる。Responseオブジェクトに限って言えば、Responseオブジェクトにcotextを加えることができる。APIViewや@api_viewを使わなかった場合、contextを渡すことができない。以下の例はある。
hoge_api/views.py from django.http import JsonResponse from django.views.generic import View from items.models import Item from hoge_api.serializers import ItemSerializer class ItemListSerializerView(View): def get(self, request, *args, **kwargs): item_objects = Item.objects.all() serializer = ItemSerializer(item_objects, many=True) return JsonResponse(serializer.data, safe=False)
上記の例では、item_objectsのデータをすべてJsonResponseで表現することができる。しかしながらJsonResponseで返せるのはitem_objectsだけで、他のオブジェクト(例えば、Userオブジェクト)はJsonResponseの内容として返すことができない。つまりある特定の1種類のクエリ、またはオブジェクトしか返すことができないのがこのコードの弱点だとわかる。この弱点を克服し複数のクエリ、オブジェクトをJosnとして返す事ができるのが@api_viewやAPIViewである。
APIViewを使う理由がわかった。それはrest_framework.APIViewを使うとrest_framework.response.Responseを使えるようになることだ。これを使うと結果の表示がいい感じになる。これくらいしかわからないけどいいのか??