장고 REST 프레임 워크의 뷰 요약

1. Function based Views


request를 받고 Response를 반환하는 함수에 @api_view 데코레이터를 사용하여 뷰를 정의합니다.
from rest_framework.decorators import api_view

@api_view(['GET', 'POST'])
def hello_world(request):
    if request.method == 'POST':
        return Response({"message": "Got some data!", "data": request.data})
    return Response({"message": "Hello, world!"})
@permission_classes(...)@renderer_classes(...)와 같은 데코레이터를 사용하여 설정을 추가 할 수 있습니다.

2. Class based Views


APIView를 상속받은 클래스로 뷰를 정의합니다.
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import authentication, permissions
from django.contrib.auth.models import User

class ListUsers(APIView):
    authentication_classes = [authentication.TokenAuthentication]
    permission_classes = [permissions.IsAdminUser]

    def get(self, request, format=None):
        usernames = [user.username for user in User.objects.all()]
        return Response(usernames)
.get(), .post() 등을 핸들러 메소드라고 부른다.
전송 된 요청은 설정된 권한 등의 검사를 통과 한 후 처리기 메서드로 전송됩니다.

3. Generic Views



여러 가지 제공된 범용 (제네릭) 뷰를 상속받은 클래스로 정의합니다.
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]

범용 뷰는 queryset를 설정하고 연결하기 때문에 기본적인 동작을 시키는 경우는 간략화하여 쓸 수 있다.
또한, 액션 메소드 (후술) 등을 오버라이드 (override)하여 동작을 확장 할 수도있다.
class UserList(generics.ListCreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [IsAdminUser]

    def list(self, request):# アクションメソッド
        queryset = self.get_queryset()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)

범용 뷰는 공통의 기본 클래스 GenericAPIView (후술)와 기본적인 동작을 제공한다 Mixin (후술)를 1 개 이상 상속하고있다. 각 Mixin이 제공하는 동작은 나중에 설명합니다.


일반 뷰
상속 중인 Mixin


CreateAPIView
CreateModelMixin

DestroyAPIView
DestroyModelMixin

ListAPIView
ListModelMixin

ListCreateAPIView
ListModelMixin, CreateModelMixin

RetrieveAPIView
RetrieveModelMixin

RetrieveDestroyAPIView
RetrieveModelMixin, DestroyModelMixin

RetrieveUpdateAPIView
RetrieveModelMixin, UpdateModelMixin

RetrieveUpdateDestroyAPIView
RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin

UpdateAPIView
UpdateModelMixin


GenericAPIView


APIView를 확장하고 자주 사용되는 동작을 추가 한 클래스. 모든 범용 뷰의 기저.
queryset 또는 .get_queryset(self)에서 사용할 쿼리 세트를 설정할 수 있습니다..perform_create(self, serializer), .perform_update(self, serializer).perform_destroy(self, instance)는 객체를 저장하고 삭제할 때의 동작을 재정의 할 수 있습니다. 이들은 Mixin의 액션 메소드에서 호출됩니다.

Mixin



기본적인 뷰의 동작을 실시하기 위한 액션 메소드를 제공하는 클래스.


Mixin
액션 메소드
동작


ListModelMixin
.list()
일람 취득

CreateModelMixin
.create()
만들기

RetrieveModelMixin
.retrieve()
취득(단체)

UpdateModelMixin
.update().partial_update()
업데이트 부분 업데이트

DestroyModelMixin
.destroy()
삭제


4. Viewsets


viewsets.ModelViewSet 등을 상속받은 클래스로 정의합니다.
from django.contrib.auth.models import User
from myapps.serializers import UserSerializer
from rest_framework import viewsets
from rest_framework.response import Response

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.all()
ModelViewSet는 모든 Mixin이 함께 된 클래스 (실제 모든 Mixin을 상속 함)로, 이것만으로 취득, 작성,리스트 취득, 갱신, 삭제가 가능해진다.
뷰셋은 액션 메소드를 제공하기 때문에 (핸들러 메소드가 아님), 기능을 확장하려는 경우 액션 메소드를 겹쳐 씁니다.


Viewsets
설명


ViewSet
APIView를 상속. 액션 메소드를 제공하지 않고, 사용하는 경우는 명시적으로 오버라이드(override) 할 필요가 있다.

GenericViewSet
GenericAPIView를 상속. 쿼리 세트 등을 설정할 수 있습니다. 명시 적으로 액션 메소드를 재정의하거나 Mixin과 함께 상속합니다.

ModelViewSet
GenericViewSet와 각 Mixin을 상속. 다양한 액션 메소드를 제공한다.

ReadOnlyModelViewSet
GenericViewSet과 RetrieveModelMixin, ListModelMixin을 상속. 취득과리스트 취득만을 제공한다.


각 클래스의 상속 관계





참고



이 기사의 내용과 샘플 코드는 다음을 참조하고 인용했다.

좋은 웹페이지 즐겨찾기