: 객체를 연속적인 데이터로 변환하는 것. JSON등의 데이터로 변환한다.
# polls_api/serializers.py
from rest_framework import serializers
from polls.models import Question
class QuestionSerializer(serializers.ModelSerializer):
class Meta:
model = Question
fields = ['id','question_text','pub_date','is_something','average_score','json_field']
Django의 CRUD는 직접 구현하는 방법도 있으나, Mixin,generic과 같은 보다 편리한 메서드를 활용하여 구현할 수 도 있다.
다음은 간단한 GET 메서드를 구현하는 방법이다.
from rest_framework.decorators import api_view # 메소드 정의 시 사용
# 만약 여러 메서드를 사용하고 싶은 경우 @api_view(['GET','POST']) 다음과 같이 리스트로 넣어준다.
@api_view()
def question_list(request):
questions = Question.objects.all()
serializer = QuestionSerializer(questions ,many = True) # 여러개의 인스턴스를 줄 때에 many를 사용
return Response(serializer.data)
이런 CRUD를 이미 구현하여 보다 쉽고 코드를 간결하게 해준다. rest_framework의 generics를 활용하는 방식이다.
from rest_framework import generics
class QuestionList(generics.ListCreateAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
class QuestionDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = Question.objects.all()
serializer_class = QuestionSerializer
이렇게 적어주기만해도 CRUD가 모두 정상 작동한다.
-> generics에서 이미 구현해두었기 때문이다. 또한 각 기능을 별도로 설정 가능하다.
'RetrieveUpdateDestroyAPIView'에서 Destroy만 빼면 제거 기능만 제외한 설정이 가능하다.
초기 수행과정에서 rest_framework template가 정상 작동하지 않는 경우가 있었다. 다음 블로그를 참고하여 해결하였다.
https://velog.io/@ssongji/Django-API-기본-페이지-표출-시-오류-TemplateDoesNotExist-at-restquestion
: 처음에 각 CRUD를 class, def내에 직접 적용하는 등 다양한 방법으로 구현해보고, 후에 간결하게 코드를 사용할 수 있는 generic을 배우고나니 실제 동작과정에 대한 이해도 증가하고, 후에 코드를 어떻게 짜야하나 라는 두려움도 해소된 것 같다.