Serializer
Serializer는 Django 모델 데이터를 JSON 또는 다른 형식의 데이터로 변환하거나, 그 반대로 역직렬화(deserialize)하고 직렬화(serialize)하는 데 사용된다. 주로 API 개발에서 모델 데이터를 외부로 노출하거나 외부에서 받은 데이터를 모델로 변환할 때 활용된다.
Serializer의 주요 기능과 목적은 다음과 같다:
- 모델 데이터 직렬화(Serialization): Django의 모델을 JSON 또는 다른 형식의 데이터로 변환한다. 이를 통해 데이터를 외부 시스템에 노출하거나 전송할 수 있다.
- 데이터 유효성 검사(Validation): Serializer는 들어오는 데이터를 모델에 저장하기 전에 유효성을 검사한다. 이는 사용자가 제공한 데이터가 모델의 필드 유효성 규칙을 준수하는지 확인한다.
- 모델 인스턴스 생성 및 업데이트: Serializer를 사용하여 새로운 모델 인스턴스를 생성하거나 기존 인스턴스를 업데이트할 수 있다.
- API View와의 통합: Serializer는 Django REST Framework의 API View와 함께 사용된다. API View는 클라이언트 요청을 처리하고 Serializer를 통해 데이터를 처리하고 응답을 생성한다.
Serializer를 상속
from rest_framework import serializers
from polls.models import Question
class QuestionSerializer(serializers.Serializer):
id = serializers.IntegerField(read_only=True)
question_text = serializers.CharField(max_length=200)
pub_date = serializers.DateTimeField(read_only=True)
def create(self, validated_data):
return Question.objects.create(**validated_data)
def update(self, instance, validated_data):
instance.question_text = validated_data.get('question_text', instance.question_text) + '[시리얼라이저에서 업데이트]'
instance.save()
return instance
이 코드는 DRF의 serializers.Serializer 클래스를 상속받아서 Question 모델에 대한 Serializer를 정의하는 코드이다.
- QuestionSerializer 클래스는 DRF의 serializers.Serializer 클래스를 상속한다. 이는 모델과 직렬화된 데이터 간의 매핑을 수동으로 정의할 수 있는 기본 Serializer 클래스이다.
- Serializer 클래스 내부 필드.
- id: 질문의 고유 ID를 나타내는 정수형 필드로, 읽기 전용(read_only)으로 설정되어 있어서 직렬화는 되지만 데이터를 수정할 수는 없다.
- question_text: 질문의 텍스트를 나타내는 문자열 필드
- pub_date: 질문이 발행된 날짜와 시간을 나타내는 필드로, 읽기 전용(read_only)으로 설정되어 있다. 이 필드도 직렬화되지만 수정할 수는 없다.
- create 메서드: Serializer에 데이터를 전달하여 새로운 Question 인스턴스를 생성하는 메서드이다. 이 메서드는 Serializer가 데이터의 유효성을 검사한 후 validated_data를 사용하여 Question 모델의 objects.create 메서드를 호출하여 새로운 Question 인스턴스를 생성한다.
- update 메서드: Serializer가 업데이트 요청을 처리하는 메서드이다. instance는 업데이트할 대상의 Question 인스턴스이고, validated_data는 유효성 검사를 통과한 후 업데이트될 데이터이다.
ModelSerializer를 상속
from rest_framework import serializers
from polls.models import Question
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ['id','question_text', 'pub_date']
이 코드는 DRF의 serializers.ModelSerializer 클래스를 상속받아서 Question 모델에 대한 Serializer를 정의하는 코드이다. 위 코드와는 다르게 Meta 클래스 내부에 사용할 모델과 직렬화할 필드들을 지정하기만 하면 알아서 메서드들을 지정해준다. 이때, 필드는 모델에 정의된 필드와 일치해야 함을 주의하자. 이를 통해 더 적은 코드로 API를 더 쉽게 구축할 수 있어서 매우 효율적이다.
'Dev Tool > Django' 카테고리의 다른 글
[Django] API 기능 살펴보기(GET, POST, PUT, DELETE) (0) | 2024.04.10 |
---|---|
[Django] 뷰(Views)와 템플릿(Templates) (0) | 2024.04.10 |
[Django] Shell 사용하기 (0) | 2024.04.09 |
[Django] model 만들고 활용하기 (0) | 2024.04.08 |
[Django] Django App 생성하기 (0) | 2024.04.08 |