[TIL #25] DRF와 시리얼라이저

안떽왕·2023년 4월 20일
0

Today I Learned

목록 보기
25/76

장고 심화과정에 진입했습니다. 그간 장고에 대한 이해도가 조금 증가한 것 같아 어느정도 자신이 있는 상황이였는데 뭔가 전혀다른 내용을 배우는듯한 기분이 들더군요.. 다시 처음부터 배운다는 마인드로 임하고 오늘 배운 것들을 정리하고자 합니다.

DRF란?

Django REST Framework의 줄임말로 장고를 기반으로 REST API서버를 만들기 위한 라이브러리를 뜻으로 Django만 사용했을 때에는 주로 Html을 응답해줬지만 DRFJSON을 응답하는 편입니다.

시리얼라이저(Serializer)

장고가 프론트와 백엔드 모두 가능한 전천후 풀스택 프레임워크이긴 하지만 다른 사람들과 협업을 하다보면 다른 프레임워크들과 만날 수 밖에 없는데 그럴때 다른 프레임워크에서도 장고의 데이터를 이해하기 위해 시리얼라이저가 필요합니다. 데이터를 변환할 때 주로 JSONXML이 있습니다.

먼저 게시글 모델을 다음과 같이 만들고

# models.py
from django.db import models
from users.models import User


class Article(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
    content = models.TextField()
    image = models.ImageField(blank=True, upload_to='%Y/%m/')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.title)

게시글 생성을 위한 시리얼라이저는 이렇게 만들 수 있었습니다.

# serializers.py
class ArticleCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Article
        fields = ("title", "image", "content")

게시글을 생성하는데 위의 모델의 항목을 모두 받을 필요는 없기에 위의 3항목에 대해서 입력받도록 만들었고 image의 경우 black=True를 가지고 있기에 사진이 누락되어도 괜찮습니다.

그리고 이를 사용해 게시글을 생성하는 함수를 만들어줄 수 있었습니다.

class ArticleView(APIView):
    def post(self, request):
        serializer = ArticleCreateSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save(user=request.user)
            return Response(serializer.data)
        else:
            return Response(serializer.errors)

post방식일 때 serializer라는 변수에 ArticleCreateSerializer라는 시리얼라이저의 데이터를 할당하고 is_valid를 통해 유효성 검사를 통과한다면 해당 데이터를 저장하고 해당 데이터를 리턴하게 만들고 그렇지 못한다면 에러메세지를 띄우게 만들었습니다.

해당 데이터를 리턴하는 이유는 포스트맨에서 작업할 때 그냥 확인용으로 만들어 둔 것이니 크게 신경쓰실 필요는 없습니다.

profile
이제 막 개발 배우는 코린이

0개의 댓글