일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
- 자바
- 배열 3요소
- SQL
- 우아한테크
- HTML역사
- 배열 예제
- 예제
- dbms
- SQL입문
- 데이터베이스
- DoIt
- html
- R1C3
- 예외
- 생성자
- DoitSQL
- 자바 오류
- 웹브라우저 수용도
- Doit입문SQL
- 웹 브라우저 전쟁
- 함수
- 크롤링
- DoitSQL입문
- 크롤링 오류
- 페이지분석
- 함수 선언
- 숫자 형식
- 키-값 데이터베이스
- 숫자형식오류
- 자바 예외
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 |
- 자바
- 배열 3요소
- SQL
- 우아한테크
- HTML역사
- 배열 예제
- 예제
- dbms
- SQL입문
- 데이터베이스
- DoIt
- html
- R1C3
- 예외
- 생성자
- DoitSQL
- 자바 오류
- 웹브라우저 수용도
- Doit입문SQL
- 웹 브라우저 전쟁
- 함수
- 크롤링
- DoitSQL입문
- 크롤링 오류
- 페이지분석
- 함수 선언
- 숫자 형식
- 키-값 데이터베이스
- 숫자형식오류
- 자바 예외
- Today
- Total
프로그래밍
[DRF] Serialize(직렬화) 본문
2023.11.28.화
Serialize(직렬화)
Django REST Framework가 제공하는 핵심 기능중에 하나이다
장고는 ORM을 지원하기 때문에 데이터베이스의 데이터가 파이썬의 객체로써 존재한다
이 Python 객체는 웹 요청 및 응답에 알맞는 데이터 형식이 아니기 때문에
해당 데이터 형식으로 변환해주어야 한다
이때 변환해주는 과정이 Serialize, 직렬화이다
DRF에서는 이러한 직렬화를 위해 serializers 모듈을 제공한다
이 모듈을 사용하여 모델 인스턴스나 쿼리셋과 같은 복잡한 데이터를 JSON 또는 다른 형식으로 변환하고
반대로 웹 요청에서 받은 데이터를 다시 파이썬 객체로 변환할 수 있다
직렬화 방식
기본적으로는 serializers.ModelSerializer를 사용하는 방식이 있지만
serializers.Serializer를 상속 받아 직접 커스텀하여 직렬화 할 수도 있다
이 밖에도 DRF가 지원하는 출력형식으로 지정할 수 도 있으며
# settings.py
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.XMLRenderer',
'rest_framework.renderers.YAMLRenderer',
),
}
응답 객체를 사용할 수도 있다
from rest_framework.response import Response
from rest_framework import status
def my_view(request):
data = {'key': 'value'}
return Response(data, status=status.HTTP_200_OK)
DRF의 Response 클래스는 데이터를 자동으로 직렬화하여 응답을 생성한다
Response 객체를 사용하면 데이터와 함께 상태 코드 및 다양한 응답 헤더를 간편하게 설정할 수 있다
쿼리 매개변수를 사용하여 응답형식을 지정할 수도 있다
http://example.com/api/my_endpoint/?format=json # json형식으로 지정
예시 코드
가장 기본적인 방식인 serializers.ModelSerializer를 사용하여 구현하였다
models.py
# models.py
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
published_date = models.DateField()
serializers.py
# serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date']
직렬화를 위해 작성된 클래스이며 주로 app 하위에 존재한다
해당 모델을 JSON 형식으로 변환하거나 반대로 JSON 데이터를 모델 객체로 변환할 수 있다
views.py
# views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .models import Book
from .serializers import BookSerializer
class BookList(APIView):
def get(self, request):
books = Book.objects.all()
serializer = BookSerializer(books, many=True)
return Response(serializer.data)
def post(self, request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
위의 직렬화 클래스를 views.py 로직에서 활용하는 예제 코드이다
API 뷰는 GET 요청에 대해 모든 책을 반환하고, POST 요청에 대해 새로운 책을 생성한다
직렬화 클래스를 사용하면 데이터 유효성 검사 및 변환을 쉽게 구현할 수 있다
'Python > Django REST Framework' 카테고리의 다른 글
[DRF] status (0) | 2023.11.29 |
---|---|
[DRF] Response (0) | 2023.11.29 |
[DRF] APIView와 api_view (1) | 2023.11.29 |
[DRF] 페이지네이션(Pagination) (2) | 2023.11.28 |
[DRF] Django REST Framework (0) | 2023.11.28 |