ModelSerializer
- 기본적으로 Serializer를 상속.
- .create() 및 .update() 메소드 제공
- serializer에 대한 validator(예: unique_together validator)를 자동으로 생성
예시) title과 content가 있는 Article 모델
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=25)
content = models.CharField(max_length=25)
ModelSerializer를 사용해 ArticleSerializer 생성
from rest_framework import serializers
from .models import Article
class ArticleSerializer(serializers.ModelSerializer):
length = serializers.SerializerMethodField()
def get_length(self, obj):
return len(obj.content)
class Meta:
model = Article
exclude = ['id']
ModelSerializer는 CreateModelMixin과 사용하면 더 간결하게 코드를 작성할 수 있다.
from rest_framework.generics import GenericAPIView
from rest_framework.mixins import ListModelMixin, CreateModelMixin
from .models import Article
from .serializers import ArticleSerializer
class ArticleListGenericView(GenericAPIView, ListModelMixin, CreateModelMixin):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
def get(self, request, *args, **kwargs):
return self.list(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
그냥 APIView를 사용했을 때
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Article
from .serializers import ArticleSerializer
class ArticleListAPIView(APIView):
def get(self, request, *args, **kwargs):
articles = Article.objects.all()
serializer = ArticleSerializer(articles, many=True)
return Response(serializer.data)
def post(self, request, *args, **kwargs):
serializer = ArticleSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
확실히 get과 post 메소드의 코드들이 GenericAPIView를 사용한 경우에 더 간결한 것을 확인할 수 있다.
'Python > Django' 카테고리의 다른 글
[DRF] Permissions (0) | 2023.06.10 |
---|---|
[DRF] GenericAPIView와 Mixins (0) | 2023.06.07 |
[DRF] Serializer - depth, repr() (0) | 2023.06.06 |
구글 소셜 로그인 in Django - 2. 유저 정보 받아오기 (1) | 2023.05.31 |
구글 소셜 로그인 in Django - 1. 애플리케이션 세팅하기 (0) | 2023.05.31 |
댓글