DRF3
Django REST framework 튜토리얼 #3
FBV와 CBV
API view를 작성하는데 두 가지 방식이 있다
있는데! 이번엔 CBV
Function-based View와 동일한 역할을 하는 코드를 Class로 구현
class SnippetDetail(APIView):
def get_object(self, pk):
try:
return Snippet.objects.get(pk=pk)
except Snippet.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet)
return Response(serializer.data)
def put(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = SnippetSerializer(snippet, data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(status=status.HTTP_204_NO_CONTENT)
여기서 , check 해야 할 부분은
class SnippetList(APIView):
def get(self, request, format=None):
snippets = Snippet.objects.all()
serializer = SnippetSerializer(snippets, many=True)
print(serializer.data)
return Response(serializer.data)
def post(self, request, format=None):
serializer = SnippetSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
print(type(serializer.data))
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
function based view와 다른 점은,
함수형의 경우, 하나의 view에서 분기를 사용해서 각 method를 분리하였다면,
class based view에서는 각 함수별로 구분하였다.
DRF의 이해에 필요한 아래의 각 View 중에
이 중 첫번째, APIView
APIView 클래스는 View 클래스를 사용하는 것과 거의 같다. 들어오는 request는 get()
또는 post()와 같은 handler method로 전달되고 API policy의 다양한 측면을 제어하는 여러 속성을 클래스에 설정할 수 있다.
Django View 클래스의 하위 클래스로 제공하는 APIView 클래스이다.
Request : Handler methods(get()
, post()
)에 전달된 request는 Django HttpRequest인스턴스가 아닌 DRF의 request instance가 된다
Response : Hndler methods는 Django의 HttpResponse가 아닌 DRF reponse 를 반환
들어오는 request는 handler method에 보내지기 전에 authentication
과 permission
, throttle check과정이 진행됨
API policy attributes
APIView
는 여러가지 기본 설정을 부여하게 된다.
serialization
)deserialization
)인증
)