CBV

Jeong Ha Seung·2022년 1월 12일

이제 CBV로 바꿔보자

rooms.views.py로 가서 다음과 같이 해준다.

from rest_framework.views import APIView
from rest_framework.response import Response
from .models import Room
from .serializers import RoomSerializer


class ListRoomsView(APIView): #APIView 이용

    def get(self, request):
        rooms = Room.objects.all()
        serializer = RoomSerializer(rooms, many=True)
        return Response(serializer.data)

이전에 했던 것과 동일한 결과가 나온다.

이제 ListAPIView라는 것을 사용해보자.

from rest_framework.generics import ListAPIView
from rest_framework.response import Response
from .models import Room
from .serializers import RoomSerializer


class ListRoomsView(ListAPIView):
    pass

위와 같이 에러가 나온다.

ListRoomsView
queryset = Room.objects.all()을 추가하면

또 다른 에러가 나온다.

serializer_class로 RoomSerializer를 추가하자.

정상적으로 나온다.

또 다른 것으로 Pagination도 가능하다.

config/settings.py에서

REST_FRAMEWORK = {
    "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.PageNumberPagination", "PAGE_SIZE": 10, }

Pagination이 완료되었고, url도 바뀐 걸 볼 수 있다.

RetrieveAPIView

이제 room들을 하나씩 볼 차례다.

from rest_framework.generics import ListAPIView, RetrieveAPIView

RetrieveAPIView : 하나의 데이터만을 보고 싶을 때 사용

RetrieveAPIView를 import 한 후에

rooms/serializers.py 내 field 부분에 pk 를 추가하고

 fields = ("pk", "name", "price", "instant_book", "user")

rooms/<pk값> 으로 접속하면 다음과 같은 오류가 나온다.

ModelViewSet

0개의 댓글