728x90
반응형
SMALL
✅ models.py
from django.db import models
from django.conf import settings
# Create your models here.
class Blog(models.Model):
title = models.CharField(max_length=100)
body = models.TextField()
APIView와 마찬가지로 동일한 모델을 생성해준다.
✅ serializers.py
from .models import Blog
from rest_framework import serializers
class BlogSerializer(serializers.ModelSerializer):
class Meta:
model = Blog
fields = '__all__'
serializer역시 동일하게 생성해준다.
✅ views.py
from .models import Blog
from .serializer import BlogSerializer
from rest_framework import generics
from rest_framework import mixins
# Blog의 목록을 보여주는 역할
class BlogList(mixins.ListModelMixin,
mixins.CreateModelMixin,
generics.GenericAPIView):
queryset = Blog.objects.all()
serializer_class = BlogSerializer
# Blog list를 보여줄 때
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
# 새로운 Blog 글을 작성 할 때
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
# Blog의 detail을 보여주는 역할
class BlogDetail(mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
generics.GenericAPIView):
queryset = Blog.objects.all()
serializer_class = BlogSerializer
# Blog의 detail 보기
def get(self, request, *args, **kwargs):
return self.retrieve(request, *args, **kwargs)
# Blog 수정하기
def put(self, request, *args, **kwargs):
return self.update(request, *args, **kwargs)
# Blog 삭제하기
def delete(self, request, *args, **kwargs):
return self.destroy(request, *args, **kwargs)
한 눈에 봐도 이전의 APIView보다 코드가 줄어든 것이 보인다. 그 이유는 BlogList, BlogDetail 클래스에서 알 수 있듯이 상속을 많이 받기 때문인데 이러한 상속을 CBV 상속이라고 한다.
동일하게 서버에 접속하면 위와 같이 나오게 되고, Mixins를 사용하게 되면 APIView를 사용했을 때보다 더욱 간단하게 CRUD를 구현할 수 있게 된다.
참고
728x90
반응형
'Python > DRF' 카테고리의 다른 글
[DRF] 게시판 기능(CRUD) 구현하기 (0) | 2023.01.17 |
---|---|
[DRF] 커스텀 유저 구현하기(회원가입/로그인) (0) | 2023.01.14 |
[DRF] ViewSets으로 CRUD 구현하기 (0) | 2023.01.12 |
[DRF] Generic CBV로 CRUD 구현하기 (0) | 2023.01.12 |
[DRF] APIView로 CRUD 구현하기 (1) | 2023.01.12 |