django 에서 APIView 와 serializers 를 사용하는 방법

2023. 3. 27. 17:11개발/토막난 상식

반응형

APIView는 Django에서 제공하는 View 클래스를 상속받아서 RESTful API를 작성할 때 사용하며, serializers는 데이터를 직렬화하고 역직렬화할 때 사용합니다.

 

  1. serializers 작성하기

우선, serializers.py 파일을 생성하여 serializers 클래스를 작성합니다. serializers 클래스는 데이터를 직렬화하거나 역직렬화하는 데 사용됩니다. 다음은 간단한 serializers 클래스의 예시입니다.

 

from rest_framework import serializers
from .models import MyModel

class MyModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'

위 코드에서는 MyModel 모델 클래스를 이용하여 MyModelSerializer를 작성했습니다. MyModelSerializer 클래스에서는 MyModel 클래스의 필드를 모두 포함하는 fields = 'all' 코드를 작성합니다.

 

     2. APIView 작성하기

APIView는 Django에서 제공하는 View 클래스를 상속받아 작성합니다. APIView를 상속받아서 API를 작성할 때는 HTTP 메소드에 따라서 다른 함수를 작성해야 합니다.

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from .serializers import MyModelSerializer
from .models import MyModel

class MyModelList(APIView):
    def get(self, request, format=None):
        mymodels = MyModel.objects.all()
        serializer = MyModelSerializer(mymodels, many=True)
        return Response(serializer.data)

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

위 코드에서는 MyModelList라는 APIView 클래스를 작성했습니다. 이 클래스에서는 HTTP GET 메소드와 HTTP POST 메소드를 다루는 함수를 작성했습니다. HTTP GET 메소드를 다루는 함수에서는 MyModelSerializer를 이용하여 모든 MyModel 객체를 직렬화한 후 Response 객체를 반환합니다. HTTP POST 메소드를 다루는 함수에서는 MyModelSerializer를 이용하여 데이터를 역직렬화하고, 데이터 유효성을 검증한 후 DB에 저장합니다. 그리고, 성공적으로 데이터를 저장한 경우 status.HTTP_201_CREATED 상태 코드와 함께 저장된 데이터를 반환합니다.

 

3. urls.py 작성하기

마지막으로, APIView를 연결하기 위해서는 urls.py 파일을 작성해야 합니다.

 

from django.urls import path
from .views import MyModelList

urlpatterns = [
    path('mymodels/', MyModelList.as_view(), name='mymodel-list'),
]

위 코드에서는 MyModelList 클래스를 '/mymodels/' URL 패턴과 연결했습니다. MyModelList 클래스는 APIView를 상속받아 작성한 것이므로, as_view() 메소드를 이용한뒤 테스트 합니다.

반응형

'개발 > 토막난 상식' 카테고리의 다른 글

link a  (0) 2023.03.28
Django REST framework의 APIView를 사용하여 보안성을 높이는 방법  (0) 2023.03.27
트랜잭션  (0) 2023.03.27
Array Method every some  (0) 2023.03.27
반응형 웹과 적응형 웹  (0) 2023.03.26