DRF Serializers
Serializerโ
์ง๋ ฌํ(serializer)์ ์ญ์ง๋ ฌํ(deserialize) ๊ธฐ๋ฅ์ ๋์์ ๊ฐ๊ณ ์๋ DRF์ ๊ธฐ๋ฅ์ด๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ API ๊ฐ ๋ฐ์ดํฐ ์์์ ๋ง์ถฐ์ฃผ๋ ๋ณํ๊ธฐ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. serializer๋ python object๋ฅผ JSON ๊ฐ์ ๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก ๋ณํํ๋ ๊ฑฐ๊ณ , deserializer๋ JSON ๋ฐ์ดํฐ๋ฅผ python object๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. DRF์ Serializer๋ ์ด๋ฐ ์์ ์ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค์ API ๊ฐ๋ฐ์ ์ฝ๊ฒ ๋ง๋ค์ด์ค๋ค.
๊ฐ๋จ ์ฌ์ฉ๋ฒโ
model ์ ์โ
๋จผ์ models.py
๋ฅผ ๋ง๋ค์ด Django ๋ชจ๋ธ์ ์ ์ํ๋ค. ์๋ฅผ ๋ค์ด Book ๋ชจ๋ธ์ ์ ์ํด๋ณธ๋ค.
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=100)
published_date = models.DateField()
isbn = models.CharField(max_length=13)
Serializer ์ ์โ
๋ค์์ผ๋ก serializers.py
๋ฅผ ๋ง๋ค๊ณ serializer๋ฅผ ์ ์ํ๋ค.
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'title', 'author', 'published_date', 'isbn']
Serializer ํ์ฉโ
์ด๋ฒ์๋ Serializer ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํด๋ณธ๋ค. views.py
์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
from rest_framework.decorators import api_view
from rest_framework.response import Response
from .models import Book
from .serializers import BookSerializer
@api_view(['GET'])
def get_book(request, pk):
try:
book = Book.objects.get(pk=pk)
except Book.DoesNotExist:
return Response(status=404)
serializer = BookSerializer(book)
return Response(serializer.data)
์์ ์ฝ๋์์ get_book
์ Book model ์ธ์คํด์ค๋ฅผ JSON์ผ๋ก ๋ณํํ์ฌ ํด๋ผ์ด์ธํธ์ ๋ฐํํ๋ค.
๋ค์์ผ๋ก ์ญ์ง๋ ฌํ๋ฅผ ํด๋ณธ๋ค. POST๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ JSON ๋ฐ์ดํฐ๋ฅผ Python object๋ก ๋ณํํ ์ ์๋ค.
@api_view(['POST'])
def create_book(request):
serializer = BookSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
์์ ์ฝ๋์์ create_book
์ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ๋ฐ์ JSON ๋ฐ์ดํฐ๋ฅผ Book ์ธ์คํด์ค๋ก ๋ณํํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ค.