[django][DRF] generics APIView

Hani Kim·2023년 11월 19일
0

개발공부

목록 보기
11/11

상속받는 클래스의 추상화(패턴화) 정도 한눈에 알아보기

APIView < mixins < generics APIView < ViewSet

  • APIView : 자주 쓰이는 view 들의 패턴을 패턴화 시켜 최소한의 코드로 Model 에 대한 view 를 구현하는 방법.
  • mixins : APIView 의 일반적인 로직들을 섞어 재사용성을 높임.
  • generics APIView : mixins 사용을 패턴화하여 정리.
  • ViewSet : generics APIViews 를 한번 더 합쳐서 정리.

generics APIView

Mixins 를 상속함으로써 반복되는 내용을 많이 줄일 수 있었지만, 여러 상속으로 인한 가독성문제와 여전히 각 request method 에 대한 연결은 직접해줘야하는 번거로움이 있었습니다. 다행이 이러한 문제를 의식하고 DRF는 하나 이상의 Mixins 와 결합된 클래스 generics APIView 클래스를 제공하고 있습니다.

DRF에서 지원하는 generic APIView
💡 django-rest-framework/rest_framework/generics.py

generics.CreateAPIView : 생성
generics.ListAPIView : 목록
generics.RetrieveAPIView : 조회
generics.DestroyAPIView : 삭제
generics.UpdateAPIView : 수정
generics.RetrieveUpdateAPIView : 조회 / 수정
generics.RetrieveDestroyAPIView : 조회 / 삭제
generics.ListCreateAPIView : 목록 / 생성
generics.RetrieveUpdateDestroyAPIView : 조회 / 수정 / 삭제

generics APIView 구현 예시

mixins 를 썼을 때 보다 많이 간소화 되었지만 queryset 과 serializer_class 가 공통적임에도 불구하고 따로 기재하고 있는 모습이 보입니다

# views.py

from rest_framework import generics
from .models import Post
from .serializers import PostSerializer

class PostListGenericAPIView(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

class PostDetailGenericAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
profile
Django Fullstack 🍕

0개의 댓글