LIT_12 Django(2)

여재우·2023년 11월 6일
0

LIT

목록 보기
13/21

LIT(Learn I Today) 내가 오늘 배운 것들에 대한 정리


Serializer

Serializer는 Frontend로 데이터를 보내기 위해 DB를 json으로 바꿀 때 사용된다.

class QuestionSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    question_text = serializers.CharField(max_length=200)
    pub_date = serializers.DateTimeField(read_only=True)

    def create(self, validated_data):
        return Question.objects.create(**validated_data)

    def update(self, instance, validated_data):
        instance.question_text = validated_data.get('question_text', instance.question_text)
        instance.save()
        return instance

ModelSerializer

일반적인 Serializer을 사용할때는 model에 이미 선언한 field를 다시 써야 하는 번거로움이 있다.
하지만 ModelSerializer를 사용하면 간단히 바꿀 수 있다.

class QuestionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Question
        fields = ['id','question_text', 'pub_date']

Class 기반의 뷰(Views)

함수 기반의 뷰는 @api_view()라는 데코레이터를 사용해서 request 메소드가 무엇인지 명시한뒤 다수의 request 메소드를 사용할 경우 if 문으로 구분하여 처리하지만
클래스 기반의 뷰는 클래스를 만든뒤 리턴되는 함수를 통해 처리한다.

class QuestionList(APIView):
    def get(self, request):
        questions = Question.objects.all()
        serializer = QuestionSerializer(questions, many=True)
        return Response(serializer.data)

    def post(self, request):
        serializer = QuestionSerializer(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)

Mixin

클래스 뷰를 사용하며 얻는 이점 중 하나인 어떤 동작에 대해 재사용 가능한 코드를 작성할 수 있다는 것을 활용.

class QuestionList(mixins.ListModelMixin,
                  mixins.CreateModelMixin,
                  generics.GenericAPIView):
    queryset = Question.objects.all()
    serializer_class = QuestionSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

Generic API View

DFR(Django Rest Framework)에서 클래스 기반 뷰의 형태로 로직을 구현학고 제네릭 뷰로 기능 제공.
특정 데이터 리소스에 대한 CRUD 액션을 지원하는 웹 API를 쉽고 효율적으로 구현 가능

class QuestionList(generics.ListCreateAPIView):
    queryset = Question.objects.all()
    serializer_class = QuestionSerializer
profile
꾸준히 학습하고 기록하기 위한 log

0개의 댓글