본문 바로가기
Python

[django] Rest Framework tutorial #3 views - 2

by reo.l 2021. 5. 6.

 

공식문서를 참고하여 만들었습니다. 링크는 아래에..

 

drf에서는 클래스 기반 뷰를 보다 간단하게 사용하도록 클래스들을 구현해 놓았다. 먼저 mixins에 대하여 알아보자.

 

from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework import mixins
from rest_framework import generics

class SnippetList(mixins.ListModelMixin,
                  mixins.CreateModelMixin,
                  generics.GenericAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

class SnippetDetail(mixins.RetrieveModelMixin,
                    mixins.UpdateModelMixin,
                    mixins.DestroyModelMixin,
                    generics.GenericAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

    def get(self, request, *args, **kwargs):
        return self.retrieve(request, *args, **kwargs)

    def put(self, request, *args, **kwargs):
        return self.update(request, *args, **kwargs)

    def delete(self, request, *args, **kwargs):
        return self.destroy(request, *args, **kwargs)

 

여기서 클래스를 만들 때 GenericAPIView와 ListModelMixin, CreateModelMixin를 사용하였는데 GenericAPIView는 핵심 기능을 제공하고 List(get), Create(post)는 각 메서드를 간단하게 제공하여 준다. mixins를 사용하기 전의 코드와 비교하여 보면 한결 간단해진 것을 볼 수 있다.

 

drf에는 이보다 더 간결하게 나타내기 위해 이러한 mixin을 연결하여 제네릭 view를 제공하는데 이에 대하여 알아보자.

 

from snippets.models import Snippet
from snippets.serializers import SnippetSerializer
from rest_framework import generics


class SnippetList(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer


class SnippetDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

 

이렇게 하면 위의 복잡한 로직을 아주 간단하게.. 나타낼 수 있다. 자세히 들어가면 다 구현이 되어 있는 것들이긴 하지만.. drf 최고.. 하지만 개인적인 생각으로는 drf를 처음 접할 때 이해하기 힘들 수 있다. 튜토리얼 첫 단계부터 차근차근 보는 것을 추천한다.

 

 

참고 : www.django-rest-framework.org/tutorial/3-class-based-views/

 

3 - Class based views - Django REST framework

We can also write our API views using class-based views, rather than function based views. As we'll see this is a powerful pattern that allows us to reuse common functionality, and helps us keep our code DRY. We'll start by rewriting the root view as a cla

www.django-rest-framework.org

 

 

댓글