공식문서를 참고하여 만들었습니다. 링크는 아래에..
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
'Python' 카테고리의 다른 글
[pandas] 여러개의 csv 파일 하나로 합치기 (0) | 2021.06.08 |
---|---|
[django] Rest Framework tutorial #2 views - 1 (0) | 2021.05.03 |
[django] Rest Framework tutorial #1 Serialization (0) | 2021.04.26 |
[django] channels tutorial #2 (0) | 2021.04.16 |
[django] channels tutorial #1 (0) | 2021.04.14 |
댓글