CBV
Class Based View
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 |
댓글