본문 바로가기

창업대전 공부

Django Rest Framework : Serializer

Serializer

serializer는 장고의 모델 데이터를 JSON 타입으로 바꿔주는 코드이다. 일반적으로 장고 모델 데이터를 템플릿에 뿌려주면 웹에 보이듯, JSON 타입으로 뿌려주면 api로 통신이 되는 것이며 내 데이터를 JSON 으로 바꿔주는 것이 serializer라 생각하면 된다.

 

serializer 예시 출처 : https://devkor.tistory.com/entry/03-Django-Rest-Framework-Serializer-View-%EA%B0%9C%EB%85%90-%EC%9D%B5%ED%9E%88%EA%B8%B0

# test/models.py
from django.db import models
# 설명만을 위한 모델로, 상당히 대충 작성 되었습니다:)
class Person(models.Model):
    id = models.IntegerField()
    name = models.CharField()
    phone = models.CharField()
    addr = models.CharField()
    email = models.CharField()
# test/serializers.py
from rest_framework import serializers
from .models import Person


class BasePersonSerializer(serializers.ModelSerializer):
    class Meta:
        model = Person
        fields = ('id', 'name', 'phone', 'addr')

serializer - view 연결하기

# test/views.py
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import Person
from .serializers import BasePersonSerializer, EmailPersonSerializer

@api_view(['GET'])
def PersonAPI(request, id):
    now_person = Person.object.get(id=id)
    serializer = BasePersonSerializer(now_person)
    return Response(serializer.data)
# => id=1에 대해 리턴된 Response: {'id': 1, 'name': '이름', 'phone': '01012345678', 'addr': '주소주소'}

@api_view(['GET'])
def EmailAPI(request, id):
    now_person = Person.object.get(id=id)
    serializer = EmailPersonSerializer(now_person)
    return Response(serializer.data)
# => id=1에 대해 리턴된 Response: {'id': 1, 'email': 'email@email.com'}

 

ModelSerializer

위 코드 예제를 보면 시리얼라이즈를 선언 할 때 ModelSerializer를 상속받았는데 원래 가장 기본적인 형태는 serializer.Serializer를 상속 받는 것이다. 이 형태로 선언하면 데이터를 어떻게 처리할 것인지에 대한 메소드가 필요하다. 이는 create나 update 같이 이미 선언되어 있는 메소드를 재작성 하는 것이다. views.py에서 직접 해야 할 것을 시리얼라이즈에서 대신 해주는 것이라 생각하면 된다. 이런 것들을 직접 선언하고 내용을 직접 정의 해야 하는 것이 시리얼라이즈를 상속받는 거라면 ModelSerializer는 이 내용들을 알아서 해준 형태라고 보면 된다.

'창업대전 공부' 카테고리의 다른 글

DRF : APIView / ViewSet / Router  (0) 2022.08.22
Django Rest Framework : Service Layer  (0) 2022.08.09
Django : 연결된 데이터 알아보기  (0) 2022.08.03
Django : 모델 데이터 조회  (0) 2022.08.03
REST API  (0) 2022.07.26