Python/DRF

[DRF] Generic CBV로 CRUD 구현하기

emhaki 2023. 1. 12. 21:56
728x90
반응형
SMALL

 

APIView와 Mixins를 사용한 CRUD는 불필요한 중복이 발생했었다.

이번에는 Generic CBV (Class Based Views)의 상속을 통해 코드의 중복을 좀 더 줄여보고자 한다.

 

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()

이전에 사용했던 모델과 동일하게 만들어준다.

 

serializers.py

from .models import Blog
from rest_framework import serializers

class BlogSerializer(serializers.ModelSerializer):
    class Meta:
        model = Blog
        fields = '__all__'

serializers도 동일하게 해준다.

 

views.py

from .models import Blog
from .serializer import BlogSerializer
from rest_framework import generics

# Blog의 목록을 보여주는 역할
class BlogList(generics.ListCreateAPIView):
    queryset = Blog.objects.all()
    serializer_class = BlogSerializer

# Blog의 detail을 보여주는 역할
class BlogDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Blog.objects.all()
    serializer_class = BlogSerializer

Generic CBV를 사용해서 views.py를 작성하면 코드가 훨씬 간결해진 것을 알 수 있다.

APIView와 mixins를 사용하면 중복코드가 많아 코드가 길어지는 불편함이 있었다.

코드는 훨씬 줄었지만, 동일하게 위와 같은 화면을 볼 수 있다.

 

참고

https://wisdom-990629.tistory.com/m/entry/DRF-Generic-CBV%EB%A1%9C-CRUD-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

728x90
반응형