Serializer를 이용한 RESTAPI 구현

2024. 1. 13. 14:28장고/Python Django

RESTAPI 를 사용함에 있어서 Serializer를 사용하였는데 직렬화라는 뜻이라고 한다.

 

대충 기존 Django 모델을 json 형태로 응답을 할 수 있게 해주는 것이다.. 코드로 한 번 보자

지금 하려는 예시코드 의 주제는 사용자의 이름, 원작동화, 성별, 나이로 초기 정보를 받은 후 원작동화를 각색하는 것으로 그 원작 동화 안에서 새롭게 이야기를 만드는 주제이다!

 

아래의 model은 첫 시작인 초기정보를 저장하는 model이라고 보면된다.

 

내가 하려는 것은 클라이언트에게 user_id, username, fariytale, gender, age를 받고난 후, 다시 클라이언트에게 새롭게 생성된 책의 book_id와 받았던 초기 정보를 다시 응답해주는 api를 만들려고 한다.

# book/model.py
class Book(models.Model):
    book_id = models.AutoField(primary_key=True)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE)
    username = models.CharField(max_length=100)
    fairytale = models.CharField(max_length=50)
    gender = models.CharField(max_length=10)
    age = models.IntegerField()

먼저 user_id, username, fariytale, gender, age를 서버에서 받아주기로 했다.

BookSerializer라는 이름으로 Serializer를 만들어주도록 하겠다.

# book/Serializer.py
class BookSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['user_id', 'username', 'fairytale', 'gender', 'age']

다음으로 BookCreateSerializer이라는 이름으로 Serializer를 만들어 준다.

book_id, username, fariytale, gender, age로 응답하기위해 만들어 주었다.

# book/Serializer.py
class BookCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = ['book_id', 'username', 'fairytale', 'gender', 'age']

api 구현을 위해 views.py 파일에서 다음과 같이 작성을 해준다. (클래스뷰)

#동화책 초기 정보 불러오기
# book/views.py

from drf_yasg.utils import swagger_auto_schema
from rest_framework.views import APIView
from book.serializers import BookSerializer, BookCreateSerializer

class BaseBook(APIView):

    def post(self, request):

        serializer = BookSerializer(data=request.data)

        if serializer.is_valid():

            book_instance = serializer.save()
            response_serializer = BookCreateSerializer(book_instance)

            return Response({
                'message': '초기 정보 입력 완료',
                'result': response_serializer.data
            }, status.HTTP_201_CREATED)

        return Response({
            'message': '유효하지 않은 입력값',
            'result': serializer.errors
        }, status.HTTP_400_BAD_REQUEST)

코드에 대한 설명을 해주자면,

값을 클라이언트에게 받고 생성을 해주는 것이라서 post 메서드이다.

serializer 변수에 BookSerializer(data=요청받은 값의 data) 를 담아주고 serializer에 들어있는 값이 유효한지(올바른 양식으로 값이 들어가 있는지) 확인하고 맞다면

book_instance 변수에 serializer.save()로 저장을 해준다.

다시 응답으로 돌려줄 변수 response_serializer에 BookCreateSerializer의 json data를 저장하고 Response로 돌려준다.

 

 

 

'장고 > Python Django' 카테고리의 다른 글

Django urls.py - path, re_path  (1) 2024.01.22