django restframwork(DRF)는 restAPI 서버를 쉽게 구축할 수 있도록하는 오픈 소스 라이브러리이다. DRF의 최대 강점은 django의 models.py에 작성한 모델 객체들을 직렬화(Serialization)가 가능하다. 결국 DB 데이터를 JSON으로 쉽게 변형할 수 있다. 이외에도 다른 httpie, post man과 같은 요청 프로그램들을 사용하지 않아도 로컬 브라우저에서 요청을 쉽게 받아볼 수 있으며 swagger와 연동하여 쉽게 API 문서를 자동으로 작성하는 데에 유용하다.
Serialization ?
직렬화란 컴퓨터 사이언스에서 데이터 스토리지 맥락에서 데이터의 구조나 객체의 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 이후에 재구성할 수 있는 포맷으로 변환하는 과정이다.
# 가상환경 설치
conda create -n drf_test python=3.8
# 가상환경 시작
conda activate drf_test
# 프로젝트 디렉토리 만들기
mkdir drf_test
# 디렉토리 이동
cd drf_test
# django 설치
pip install django
# drf 설치
pip install djangorestframework
# drf_test 프로젝트 시작
django-admin startproject drf_test
# user app 생성
django-admin startapp hello
settings.py
에 hello app과 rest framework 추가INSTALLED_APPS = [
...
'rest_framework',
'hello',
]
models.py
에 SayHi 모델 객체 작성from django.db import models
class SayHiModel(models.Model):
country = models.CharField(max_length=30)
sayHi = models.CharField(max_length=20)
python manage.py makemigrations
python manage.py migrate
from rest_framework import serializers
from .models import SayHi
class SayHiSerializer(serializers.ModelSerializer):
class Meta:
model = SayHiModel
fields = '__all__'
from rest_framework import serializers
from .models import SayHi
class SayHiSerializer(serializers.ModelSerializer):
class Meta:
model = SayHiModel
fields = ['country']
from rest_framework import serializers
from .models import SayHi
class SayHiSerializer(serializers.ModelSerializer):
class Meta:
model = SayHiModel
exclude = ['country']
from django.urls import path, include
urlpatterns = [
path('hello', include('hello.urls')),
]
from django.urls import path, include
from .views import ListSayHi
urlpatterns = [
path('', ListSayHi),
]
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.decorators import api_view
from .models import SayHiModel
from .serializers import SayHiSerializer
@api_view(['GET'])
class ListSayHi(APIView):
def get(self, request):
lists = [country.sayHi for country in SayHiModel.objects.all()]
serializer = SayHiSerializer(lists, many=True)
return Response(serializer.data)
localhost:8000/hello
uri 브라우저에 입력한 결과[]
이 반환된다.