Django restframework Tutorial

gemma. K·2021년 3월 12일
0

django restframework

목록 보기
1/3
post-thumbnail

django restframework ?

django restframwork(DRF)는 restAPI 서버를 쉽게 구축할 수 있도록하는 오픈 소스 라이브러리이다. DRF의 최대 강점은 django의 models.py에 작성한 모델 객체들을 직렬화(Serialization)가 가능하다. 결국 DB 데이터를 JSON으로 쉽게 변형할 수 있다. 이외에도 다른 httpie, post man과 같은 요청 프로그램들을 사용하지 않아도 로컬 브라우저에서 요청을 쉽게 받아볼 수 있으며 swagger와 연동하여 쉽게 API 문서를 자동으로 작성하는 데에 유용하다.

Serialization ?
직렬화란 컴퓨터 사이언스에서 데이터 스토리지 맥락에서 데이터의 구조나 객체의 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 이후에 재구성할 수 있는 포맷으로 변환하는 과정이다.

DRF tutorial

기본 세팅

# 가상환경 설치
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
  • root 디렉토리의 settings.py에 hello app과 rest framework 추가
INSTALLED_APPS = [
    ...
    'rest_framework',
    'hello',
]

모델 객체 작성

  • hello app의 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

serializers.py 작성하기

  • hello app 내에 serializer.py 파일 만들기
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']

urls.py

  • root 디렉토리에는 모든 url들을 연결 시켜준다.
from django.urls import path, include

urlpatterns = [
    path('hello', include('hello.urls')),
]
  • hello app 의 urls.py 작성
from django.urls import path, include
from .views import ListSayHi

urlpatterns = [
    path('', ListSayHi), 
]

views.py

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)

local 환경에서 응답 받기

  • localhost:8000/hello uri 브라우저에 입력한 결과
  • 현재 데이터 베이스에 저장된 SayHi 테이블에 데이터가 존재하지 않아 결과 값으로 []이 반환된다.

0개의 댓글