[drf | agiliq] Serializing & Deserializing Data
Serializing & Deserializing Data
DRF는 웹 API를 간단하고 유연하게 구축하는 프로세스를 만듭니다. 여러 추가 기능들이 포함되어 있으면 데이터를 직렬화
및 역직렬화
할 수 있도록 잘 설계된 기본 클래스가 함께 제공됩니다.
Serializing & Deserializing Data
API에 가장 먼저 필요한 것은 모델 인스턴스를 표현으로 직렬화하는 방법을 제공하는 것입니다.
직렬화는 네트워크를 통해 전송할 수있는 데이터의 스트리밍 가능한 표현을 만드는 프로세스
입니다.역직렬화는 그 반대 프로세스입니다.
Creating Serializers
모델 인스턴스를 json 표현으로 직렬화 및 역 직렬화하는 직렬화 클래스를 만드는 것을 시작하겠습니다.
polls/serializers.py
파일을 만들게요.
ModelSerializer
를 사용하여 필드 집합을 자동으로 결정하고 create()
및 update()
메서드의 구현을 생성하여 코드 중복을 줄일수 있습니다.
from rest_framework import serializers
from .models import Poll, Choice, Vote
class VoteSerializer(serializers.ModelSerializer):
class Meta:
model = Vote
fields = '__all__'
class ChoiceSerializer(serializers.ModelSerializer):
votes = VoteSerializer(many=True, required=False)
class Meta:
model = Choice
fields = '__all__'
class PollSerializer(serializers.ModelSerializer):
choices = ChoiceSerializer(many=True, read_only=True, required=False)
class Meta:
model = Poll
fields = '__all__'
The PollSerializer
in detail
class PollSerializer(serializers.ModelSerializer):
choices = ChoiceSerializer(many=True, read_only=True, required=False)
class Meta:
model = Poll
fields = '__all__'
PollSerializer클래스는 serializers.ModelSerializer
를 상속받음으로써 여러 메서드가 생기게되요.
- 데이터가 모델 인스턴스를 생성/업데이트하기에 충분하고 유효한지 알 수 있는
is_valid(self, ..)
- 인스턴스를 만들거나 업데이트하는 방법을 알고 있는 메서드
save(self, ..)
- 인스턴스를 생성하고 커스터마이징 할 수 있는
create(self, validated_data, ..)
- 인스턴스를 업데이트하고 커스터마이징 할 수 있는
update(self, instance, validated_data, ..)
Using the PollSerializer
serializer를 사용하여 poll개체를 만들어 볼게요.
In [1]: from polls.serializers import PollSerializer
In [2]: from polls.models import Poll
In [3]: poll_serializer = PollSerializer(data={"question": "Mojito or Caipirinha?", "created_by": 1})
In [4]: poll_serializer.is_valid()
Out[4]: True
In [5]: poll = poll_serializer.save()
In [6]: poll.pk
Out[6]: 5
위의 poll.pk
은 객체가 DB에 커밋되었는지 알수 있게 하는데요. serializer를 통해서 업데이트도 가능해요.
In [9]: poll_serializer = PollSerializer(instance=poll, data={"question": "Mojito, Caipirinha or margarita?", "created_by": 1})
In [10]: poll_serializer.is_valid()
Out[10]: True
In [11]: poll_serializer.save()
Out[11]: <Poll: Mojito, Caipirinha or margarita?>
In [12]: Poll.objects.get(pk=5).question
Out[12]: 'Mojito, Caipirinha or margarita?'
다음 장에서는 뷰를 작성하기 위해 serializer를 사용할 것입니다.
Author And Source
이 문제에 관하여([drf | agiliq] Serializing & Deserializing Data), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hyeseong-dev/drf-agiliq-Serializing-Deserializing-Data저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)