Django’s generic views... were developed as a shortcut for common usage patterns... They take certain common idioms and patterns found in view development and abstract them so that you can quickly write common views of data without having to repeat yourself.

장고의 제너릭 뷰는 공통으로 사용하는 패턴들의 지름길이 되도록 개발되었다. 제너릭뷰는 사용자가 데이터의 공통의 뷰를 스스로 다시 반복하지 않고 빠르게 쓸 수 있도록 뷰 개발에서 찾은공통의 관용구와 패턴을 수반하고 추상화한다.

클래스 기반의 뷰의 핵심 혜택 중의 하나는 재사용 가능한 행동을 작성할 수 있다는 것이다. REST framework는 공통적으로 사용되는 패턴을 제공하는 미리 만들어진 뷰를 제공함으로써 이 이점을 취한다.

REST framework는 데이터베이스 모델과 빠르게 매핑되는 API 뷰를 빠르게 작성할 수 있도록 제너릭 뷰를 제공한다.

만약 제너릭 뷰가 API에서 필요한 부분과 맞지 않다면 제너릭 뷰를 드랍하고 기존의 APIView 클래스를 사용하거나, 재사용 가능한 제너릭 뷰의 세트를 작성하기 위해 제너릭 뷰에서 사용되는 믹스인과 베이스 클래스를 재사용 할 수도 있다.

예제


일반적으로 제너릭뷰를 사용할 때는, 뷰를 오버라이드하고 여러 클래스 속성을 설정한다.

from django.contrib.auth.models import User
from myapp.serializers import UserSerializer
from rest_framework import generics
from rest_framework.permissions import IsAdminUser

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAdminUser]

좀 더 복잡한 상황에는 뷰 클래스의 다양한 메소드들을 오버라이드 할 수 있다.

class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAdminUser]

    def list(self, request):
        # Note the use of `get_queryset()` instead of `self.queryset`
        queryset = self.get_queryset()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

간단한 상황에는 .as_veiw() 메소드를 사용해 클래스 속성을 전달할 수 있다.

path('users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list')

API Reference

GenericAPIView