지난 번 프로젝트를 시작하기 위한 settings.py 초기 설정을 해보았다. 이제 이어 REST framework이 무엇인지 코딩을 통해 이해하기 위해 튜토리얼을 시작해보려고 한다.

REST framework 설치 및 세팅

$ pip install djangorestframework

django를 설치할 때와 마찬가지로 명령어를 통해 쉽게 설치할 수 있다. 그리고 아래의 명령어를 통해 quickstart라는 앱을 하나 생성해준다.

$ python manage.py startapp quickstart

그리고 이 추가된 기능들을 사용할 수 있도록 settings.py에 아래와 같이 추가해준다.

# rest_tutorial/settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
    'rest_tutorial.apps.QuickstartConfig',
]

데이터베이스에 migrate해주고, 이후 개발웹에서 이용할 superuser를 만들어준다.

# 마이그레이션
$ python manage.py makemigrations
$ python manage.py migrate

# superuser 생성
$ python manage.py createsuperuser

Models

다음으로, 튜토리얼 api에서 제공할 모델들을 가장 간단하게 만들어보았다. rest_tutorial 폴더의 models.py를 열고 다음과 같은 모델을 생성한다.

# rest_tutorial/models.py
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=60)
    alias = models.CharField(max_length=60)

    def __str__(self):
        return self.name

모델을 생성하고 난 뒤, Django가 이를 데이터베이스에 반영할 수 있도록 마이그레이션을 해준다.

$ python manage.py makemigrations
$ python manage.py migrate

생성된 모델을 admin 사이트에서 접근하고 생성/수정/삭제할 수 있도록 하려면 admin에 해당 모델을 등록해주어야 한다.

# quickstart/admin.py
from django.contrib import admin
from quickstart.models import Person

admin.site.register(Person)

이제 admin 사이트에서 Person이라는 모델의 인스턴스를 직접 생성할 수 있다. 간단하게 몇가지 Person 인스턴스를 생성해보았다.

Serializers

모델을 생성하였으므로, Django 앱에서 활용 가능한 상태로 serialize 하도록 설정해준다.

이제 해야할 일은 REST framework에 모델을 어떻게 serialize 하는지 알려주는 것이다. quickstart 폴더에 serialzers.py를 생성하여 다음과 같이 입력한다.

# quickstart/serializers.py
from rest_framework import serializers
from .models import Person

class PersonSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Person
        fields = ('id', 'name', 'alias')

Views

이제 URL과 연결하여 데이터를 전달할 뷰를 만든다. 다음과 같이 quickstart/views.py를 수정한다.

# quickstart/views.py
from rest_framework import viewsets
from .serializers import PersonSerializer
from .models import Person

class PersonViewSet(viewsets.ModelViewSet):
    queryset = Person.objects.all().order_by('name')
    serializer_class = PersonSerializer

Urls

이제 URL을 연결해주어야 한다.

root URLconf 파일을 정돈되게 유지하기 위해서 quickstart에 필요한 연결은 quickstart/urls.py에 저장하고, rest_tutorial/urls.py에는 아래와 같이 연결하여 그 urls.py를 포함해준다.

# rest_tutorial/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('quickstart.urls')),
]

그리고 quickstart 폴더에 urls.py를 생성하여 아래와 같이 입력해준다.

# quickstart/urls.py
from django.urls import include, path
from rest_framework import routers
from . import views


router = routers.DefaultRouter()
router.register(r'persons', views.PersonViewSet)


urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
]

만들어진 페이지 확인하기

URL 연결까지 끝났다면 제대로 작동하는지 확인해야 한다.

$ python manage.py runserver

위와 같이 입력하여 개발서버를 실행하고 http://127.0.0.1:8000 으로 접속하면 아래와 같은 화면을 볼 수 있다.

http://127.0.0.1:8000/persons/ 를 클릭하고 들어가면, 아까 이전 단계에서 임의로 생성했던 Person 모델의 인스턴스들을 확인할 수 있다.

CREATE / 아래에 보면 인스턴스를 생성할 수 있는 창이 보인다. 새로운 인스턴스를 생성해보았다.

기존 인스턴스에 새 인스턴스가 추가된 목록을 확인할 수 있다.

READ, UPDATE, DELETE / http://127.0.0.1:8000/persons/1 을 입력하고 들어가면 id가 1인 인스턴스의 정보가 표시되고, 아래에 이 정보를 수정할 수 있는 항목과, 상단에 인스턴스를 지울 수 있는 버튼이 표시된다.

이와 같이 REST framework의 주된 특징인 CRUD 연산을 직접 해보았다. 하나의 ModelViewSet을 쓰면서도 여러 뷰를 전달받을 수 있는 것은 router가 자동으로 만들어주기 때문이고, ViewSet이 제너릭으로 CRUD 연산을 지원하기 때문에 위의 페이지에서 직접 해볼 수 있었다.

이후

튜토리얼을 끝냈으니, 이후에는 인터넷 페이지 제작의 가장 기본이라고 할 수 있는 게시판 만들기를 해보려고 한다. 게시판의 게시글을 REST framework를 이용해 게시글을 쓰고(Create), 읽고(Read), 수정하고(Update), 지우는(Delete) 과정을 실제 게시판 페이지로 만들어봄으로써 REST framework에 좀 더 친숙해질 수 있을 것 같다.

내용 관련하여 도움이나 조언 언제든 환영합니다!

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기