당신은 멋쟁이, 우리는 장고쟁이~

0%

DRF Tutorial 3편 - Serializer class 생성

Serializer Class 생성


Creating a Serializer Class


우리의 web API 를 시작하기 위해서 첫번째로 필요한것은, serializing 그리고 deserializing 하여 snippet 인스턴스들을 json 같은 형태로 재구성 하는 방법을 제공해야 합니다.


Serialization 이란?

직렬화, 또는 시리얼라이제이션 (serialization) 은,

컴퓨터 과학의 데이터 스토리지 문맥에서, 데이터 구조나 객체 상태를 다른 컴퓨터 환경에 저장하고,

나중에 재구성할수 있는 포맷으로 변환하는 과정입니다.


반대로, 일련의 바이트로부터, 데이터 구조를 추출하는 일은 역직렬화 또는 디시리얼라이제이션 (deserialization) 이라고 합니다.


우리는 이것을 Django 의 forms 와 비슷하게 작동하는 serializer 클래스를 선언하여 작업할수 있습니다.


snippet/serializers.py 파일을 생성하고, 아래 내용을 추가해 줍니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from rest_framework import serializers 
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES


class SnippetSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
title = serializers.CharField(required=False, allow_blank=True, max_length=100)
code = serializers.CharField(style={'base_template': 'textarea.html'})
linenos = serializers.BooleanField(required=False)
language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')
style = serializers.ChoiceField(choices=STYLE_CHOICES, default='friendly')

def create(self, validated_data):
"""
Create and return a new 'Snippet' instance, given the validated data
"""
return Snippet.objects.create(**validated_data)

def update(self, instance, validated_data):
"""
Update and return an existing 'snippet' instance, given the validated data
"""
instance.title = validated_data.get('title', instance.title)
instance.code = validated_data.get('code', instance.code)
instance.linenos = validated_data.get('linenos', instance.linenos)
instance.language = validated_data.get('language', instance.language)
instance.style = validated_data.get('style', instance.style)
instance.save()
return instance

serializer 클래스의 첫번째 부분은 serialized / deserialized 될 필드들을 정의합니다.


create() 와 update() 메서드들은,

serializer.save() 가 호출 되었을때에,

어떻게 완성된 인스턴스들이 생성되고 수정될수 있는지 정의 합니다.


Form 클래스와 유사성


Serializer 클래스는 Django Form 클래스와 매우 흡사합니다. 그리고, required, max_length, default 같은 여러 필드들에 유효성 플래그들을 포함하고 있습니다.


필드 플래그들은, 어떻게 serializers 가 특정 상황속에서 출력되어야 하는지 제어합니다. 플래그는 Django Form 클래스에서 사용하는 widget=widgets.Textarea 와 같습니다. 이는, 특별히 어떻게 브라우저로 볼수 있는 API 가 표시되어야 하는지 제어해야 할때 유용합니다. 이 부분에 대해서는 나중에 볼수 있습니다.


우리는 ModelSerializer 클래스를 사용하여, 우리 스스로 저장 동작을 할수도 있습니다만. 이는 나중에 보게 될것입니다. 단지, 지금은, serializer 정의를 어떻게 하는지에 대해서만 명시합니다.