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 |