DRF class-based-views (https://www.django-rest-framework.org/api-guide/views/#class-based-views)
Generic-views (https://www.django-rest-framework.org/api-guide/generic-views/)
🚀 class based view
DRF의 설명을 보면 크게 views를 class based view와 function based view로 나뉩니다. django와 똑같습니다.
종래의 decorator를 활용한 function based view는 다음과 같습니다.
from rest_framework.decorators import api_view
from rest_framework.response import Response
from . import models as rooms_models
from .serializers import RoomSerializer
@api_view(["GET"])
def list_rooms(request):
rooms = rooms_models.Room.objects.all()
serialized_rooms = RoomSerializer(rooms, many=True)
return Response(data=serialized_rooms.data)
이를 class based view로 바꿔보겠습니다.
get 명령을 받으려먼 다음과 같이 get 함수를 만들면 됩니다. post는 def post(...) 로 해주면 되겠죠
from rest_framework.views import APIView
from rest_framework.response import Response
from . import models as rooms_models
from .serializers import RoomSerializer
class ListRoomsView(APIView):
def get(self, request):
rooms = rooms_models.Room.objects.all()
serializer = RoomSerializer(rooms, many=True)
return Response(data=serializer.data)
urls.py 부분도 바꿔줍시다. class 뷰니까 as_view() 메서드를 사용해줘야 합니다.
urlpatterns = [
path("list", views.ListRoomsView.as_view()),
]
🚀 Generic view
한편, django에서 class based view를 쓸 때와 마찬가지로 Generic view를 상속받아 사용할 수도 있습니다.
generic view를 쓰다보면 알겠지만 대개 queryset (무슨 데이터를 쓸거야)와 serializer_class가 필수값입니다.
까먹어도 어차피 django에서 필수도 넣으라고 오류 메세지를 보내주니 알아만 둡시다.
일반 django에서는 generic을 확인하기 위해 여기를 확인했습니다. (https://ccbv.co.uk/)
DRF에서는 generic을 확인하기 위해 다음 사이트를 활용합니다. (http://www.cdrf.co/)
ListAPIView를 사용해보았습니다. ListAPIView는 mixins.ListModelMixin, GenericAPIView를 합쳐 만든 것입니다. (generic.py를 열어보면 다 나와있습니다)
from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from . import models as rooms_models
from .serializers import RoomSerializer
class ListRoomsView(ListAPIView):
queryset = rooms_models.Room.objects.all()
serializer_class = RoomSerializer
'Django, Flask > 🔫 Django REST framework (DRF)' 카테고리의 다른 글
DRF ViewSet : ModelViewSet로 ViewSet 맛보기 (0) | 2020.06.16 |
---|---|
pagination (0) | 2020.06.16 |
DRF serializers를 통해 장고 객체를 json으로 만들기 (1) | 2020.06.16 |
REST API 설계 원칙 (0) | 2020.06.16 |