Django Restful framework Tutorial 1

Django RESTful framework Tutorial 01

  • python dict는 JSON Serialize 변환이 가능하다. 하지만 query_set은 안된다.
  • Serialization(직렬화) - 데이터 스토리지 문맥에서 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장 하거나 나중에 재구성할 수 잇는 포맷으로 변환하는 과정.

    파이썬 객체를 어딘가로 전송할 수 있는 방법이 없다. 특정한 형태로 데이터를 변환해서 저장하거나 전송해서 상대가 받아서 다시 쓸수 있는 데이터로 만들수 있어야 한다. 데이터를 저장하거나 전송하기 위해서 특정 형태(전송이 가능한형태)로 바꿔주는 것.

  • json은 가장 일반적이고 대부분의 언어에서 파싱하여 데이터를 복원하는데 큰 문제가 없기 때문에 많이 사용한다.

설치

pip install djangorestframework

INSTALLED_APPS에 등록

...
'rest_framework',

전송하고 싶은 데이터의 모델을 직렬화 시켜주는 모듈을 만들어야 한다. 직렬화를 하고 싶은 모델이 있는 앱에 serializers.py라는 모듈을 만들고 해당 모델을 직렬화 시키켜주는 코드를 작성하자.

from rest_framework import serializers
from .models import SomeModel


class SomeModelSerializer(serializers.ModelSerializer):
    class Meta:
        model = SomeModel
        fields = '__all__'

ModelSerializerrest_framework 에서 지원 해주는 특정모델을 전송에 필요한 형식으로 바꿀수 있도록 제공해 주는것으로 이것을 사용하여 SomeModel의 모든 필드를 사용 하겠다고 선언함. 그러면 해당 시리얼라이저를 통해 인스턴스나 쿼리셋을 넣게 되면 모든 필드에대한 값이 자동적으로 직렬화가 되게 된다.

그리고 이 시리얼라이저를 사용할 수 있는 부분이 제한되어 있다. 사용하기 위해서는 rest_framework에서 제공하는 APIView를 사용해야 하며, 이 뷰는 클래스 기반이다. 그리고 함수기반 뷰는 사용 할 수 없다. 사용방법은 데이터를 받는 방식의 함수를 선언해주면 된다.

from rest_framework.response import Response
from rest_framework.views import APIView
from ...serializers import SomeModelSerializer
from ...models import SomeModel

class SomeView(APIView):
    def get(self, request):
	    somemodels = SomeModel.objects.all()
	    serializer = SomeModelSerializer(somemodels, many=true)
	    return Response(serializer.data)
    def post(self, request):
        ...

somemodels의 쿼리셋을 시리얼라이저에 전달하여 모든 쿼리셋에대한 모든 필드를 직렬화 시킨 시리얼라이저를 생성시키고 데이터꺼내서 rest_framework의 Response를 사용하여 반환한다.

이렇게 만들어진 뷰를 urls에 연결 해야 하는데 클래시 기반 뷰는 클래스 기반 자체가 실행할 수 있는 함수가 아니다. 그래서 클래스 기반 뷰의 기본을 상속받은 뷰는 as_view()라는 함수를 가지는데, 이 함수를 이용하여 해당 클래스뷰에 대한 동작을 만들수 있는 함수가 반환한다.

form .veiws import SomeView

urlpatterns = [
    path('some/', SomeView.as_view(), name='some-view')
]

Comments