ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 

     

Designed by Tistory.