Django - rest framework(APIView)

문주은·2022년 6월 30일
0

1. APIView

1-1) 주요 기능

  • 직렬화/비직렬화 처리
  • 인증 체크
  • 사용량 제한 체크
  • 권한 클래스 지정
  • 요청된 API 버전 문자열을 탐지하여 request.version에 저장

-> 이러한 기능들을 APIView class를 통해 간단하게 구현 가능

1-2) 설명

  • 하나의 CBV이므로 하나의 URL만 처리 가능
  • 각 method(get, post, put, delete) 요청이 들어올 때 호출
  • 예시 코드
    class PatientDetailAPIView(APIView):
        def get_object(self, pk):
          try:
              return Patient.objects.get(pk=pk)
          except Patient.DoesNotExist:
              raise Http404
              
    	def get(self, request, pk):
      		patient = self.get_object(pk)
            serializer = PatientSerializer(patient)
            return Response(serializer.data)
            
        def put(self, request, pk):
        	patient = self.get_object(pk)
            serializer = PatientSerializer(patient)
            if serializer.is_valid():
            	serializer.save()
                return Response(serializer.data)
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    • 각 클래스마다 겹치는 패턴들이 보이는 것을 확인할 수 있음
    • 겹치는 패턴들을 간단하게 구현할 수 있는 것이 DRF의 generics
    • generics를 합쳐서 구조화한 것이 viewset

1-3) Viewset 활용

  • generics.ListCreateAPIView를 상속받는 클래스와 generics.RetrieveUpdateDestroyAPIView를 상속받는 클래스 두개가 합쳐진 것이 ModelViewSet 이다.
# ==== views.py ====
class PatientViewSet(ModelViewSet):
	queryset = Patient.objects.all()
    serializer_class = PatientSerializer

2. Renderer

2-1) JSONRenderer

  • json.dumps를 통한 JSON 직렬화

2-2) BrowsableAPIRenderer

  • self-document HTML 렌더링
profile
Data Engineer

0개의 댓글