TIL) 데브코스 13일차 - Django(3)

Pori·2023년 11월 1일
0

데엔

목록 보기
8/47

Serializers

Serialize (직렬화) ↔ Deserialize

: 객체를 연속적인 데이터로 변환하는 것. JSON등의 데이터로 변환한다.

  • 시리얼라이저 생성 시에 ModelSerializer를 통해 생성해주면 create, update 메서드의 별도 생성없이 구현 가능합니다.
# 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']

CRUD

Django의 CRUD는 직접 구현하는 방법도 있으나, Mixin,generic과 같은 보다 편리한 메서드를 활용하여 구현할 수 도 있다.

API_VIEW를 활용한 CRUD

다음은 간단한 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)

Generic

이런 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


공부 한 내용

  • Django에서의 CRUD 구현
  • Mixin, generic

새롭게 배운 내용

  • Django를 이용한 CRUD의 구현
  • 간편하게 사용가능한 Mixin, generic

느낀점&참고

: 처음에 각 CRUD를 class, def내에 직접 적용하는 등 다양한 방법으로 구현해보고, 후에 간결하게 코드를 사용할 수 있는 generic을 배우고나니 실제 동작과정에 대한 이해도 증가하고, 후에 코드를 어떻게 짜야하나 라는 두려움도 해소된 것 같다.

0개의 댓글