본문 바로가기
  • 기억보단 기록을..
Python/DRF

[DRF] CBV - APIView, Mixins, generics APIView, ViewSet

by reine94._.dev 2021. 1. 5.

CBV

Class Based View


 

CBV 고도화 단계

 

django 에서는 view 를 통해서 HTTP 요청을 처리합니다.
view에서 이를 처리하는 방법은 다양합니다. FBV(함수기반뷰), CBV(클래스기반뷰) 를 통해서도 API 를 만들 수 있지만 rest_framework 는 보다 쉽게, 효율적으로 만들 수 있습니다.

 

# serializers.py

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'
# views.py

serializer = PostSerializer(data=request.POST)
if serializer.is_valid():
    serializer.save()
    return JsonResponse(serializer.data, status=201)
return JsonResponse(serializer.errors, status=400)

 

APIView 클래스와 api_view 장식자

APIView - CBV
api_view - FBV

두 가지 모두 view에 여러가지 기본 설정을 부여하게 됩니다.
이는 아래와 같고 상황에 맞춰 이를 커스텀하여 사용합니다.

 

# APIView
from rest_framework.views import APIView
class SnippetsAPIView(APIVIEW):
	def get(self, request):
		pass
	def post(self, request):
		pass

# Mixins
from rest_framework import mixins
RetrieveModelMixin : Get
ListModelMixin : Gets
CreateModelMixin : Post
UpdateModelMixin : Put
DestroyModelMixin : delete

# Generics APIView
from rest_framework import generics
generics.CreateAPIView : 생성
generics.ListAPIView : 목록
generics.RetrieveAPIView : 조회
generics.DestroyAPIView : 삭제
generics.UpdateAPIView : 수정
generics.RetrieveUpdateAPIView : 조회/수정
generics.RetrieveDestroyAPIView : 조회/삭제
generics.ListCreateAPIView : 목록/생성
generics.RetrieveUpdateDestroyAPIView : 조회/수정/삭제

# ViewSets - Router 사용해야함
from rest_framework import viewsets
viewsets.ReadOnlyModelViewSet : 목록 조회, 특정 레코드 조회 (get만 가능)
viewsets.ModelViewSet : 목록 조회, 특정 레코드 생성/조회/수정/삭제 전부 자동으로 만들어줌.
Viewsets.ViewSet : 자동으로 만들지마! 내가 다 만들께 

urls.py
from rest_framework.routers import DefaultRouter
post_router = DefaultRouter()
post_router.register('viewset',views.PostViewSet)


[출처]
https://uiandwe.tistory.com/1267
https://ssungkang.tistory.com/entry/Django-APIView-Mixins-generics-APIView-ViewSet%EC%9D%84-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

'Python > DRF' 카테고리의 다른 글

[DRF] ModelSerializer 사용법 (feat. method-hyperlink)  (0) 2021.01.20
[DRF] JWT 사용하기 (feat.simplejwt)  (0) 2021.01.19
[DRF] Json 기초  (0) 2021.01.05

댓글