-
mixins 상속을 통한 APIView, GenericAPIView카테고리 없음 2021. 11. 24. 17:11
APIView => mixins => Generics => Viewset
<Mixins>
APIView는 각 request method 마다 직접 serializer 처리를 하였다. 여기서 여러 serializer에 대해서 중복이 발생할 수 있다. 따라서 mixin에서는 이러한 기능들을 미리 구현할 수 있다.
<DRF에서 지원하는 Mixins>
CreateModelMixin
ListModelMixin
RetrieveModelMixin
UpdateModelMixin
Mixin을 사용해서 반복을 줄일 수 있지만, 그래도 많은 반복이 사용된다. 따라서 generics를 사용하여 코드를 줄일 수 있다.
<여러 generics APIView>
generics.CreateAPIView : post -> create
generics.ListAPIView : get -> list
generics.RetrieveAPIView : get -> retrieve
generics.DestoryAPIView : delete -> destory
generics.UpdateAPIView : put -> update, patch -> partial_update
generics.ListCreateAPIView : get -> list, post -> create
generics.RetrieveUpdateAPIView : get -> retrieve, put -> update, patch -> partial_update
generics.RetrieveDestroyAPIView : get -> retrieve, delete -> destroy
generics.RetrieveUpdateDestroyAPIView : get -> retrieve, put -> update, patch -> partial_update, delete -> destroy
<ViewSet>
generics를 사용하여 많이 간소화할 수 있지만 아직 queryset과 serializer_class가 공통적인데도 불구하고 따로 기재해야 한다. 이를 한번에 처리할 수 있는 것이 ViewSet이다!
# views.py from .models import Post from .serializers import PostSerializer from rest_framework import viewsets class PostViewSet(viewsets.ModelViewSet): queryset = Post.objects.all() serializer_class = PostSerializer
<GenericAPIView>
1) basic settings
- queryset = model.objects.all()
- serializer_class = serializer 지정
- lookup_field = 개별 모델 인스턴스의 object 조회를 수행 할 때 사용해야 하는 모델 필드. 기본값은 pk
8