장고(Django) RESTful Framework 시작하기

2020. 7. 19. 14:42위키

장고(Django) RESTful Framework 를 만드는 방법에 대해 간단하게 이야기할거에요.

 

와 장고! 와 REST!

 

Django RESTful Framework 란?

Django 는 파이썬을 이용해서 웹 서비스를 만들 수 있는 프레임워크에요. 그런데 굳이 Django 로 모든 서비스를 만들 필요가 없을 수 있어요. 모바일 어플리케이션을 만들고 데이터를 주고 받을 서버만 Django 로 만드는 경우가 있겠죠? Django RESTful Framework 는 이때 유용하게 써먹을 수 있어요. REST 가 무엇인지 잘 모른다면 아래 글들에서 정말 잘 설명해주고 있으니 참고하도록 해요.

 

What is REST? | Codecademy

Learn about how to design web services using the REST paradigm

www.codecademy.com

 

What Is an API?

You’ve likely seen the term “API” come up. Operating system, web browser, and app updates often announce new APIs for developers. But what is an API?

www.howtogeek.com

 

Home - Django REST framework

 

www.django-rest-framework.org

코드는 여기에 있어요.

 

hwangwoojin/django-restful-framework

Contribute to hwangwoojin/django-restful-framework development by creating an account on GitHub.

github.com

 

Django RESTful Framework 시작하기

먼저 pip 로 장고와 장고 RESTful Framework 를 설치해요.

$ pip install django
$ pip install djangorestframework

그리고 프로젝트를 생성해요. 저는 이름을 그냥 project 로 짓기로 했어요.

$ django-admin startproject [프로젝트이름]
$ cd [프로젝트이름]

그 다음 어플리케이션을 만들어요. 저는 이름을 그냥 app 으로 짓기로 했어요.

$ python manage.py startapp [어플리케이션이름]

 

어플리케이션을 만들었으면 settings.py 에 추가해야 해요. 우린 RESTful Framework 를 만들기로 했으니까 rest_framework 도 추가해야 해요.

# project/project/settings.py

INSTALLED_APPS = [
    # RESTful Framework
    'rest_framework',
    'app',

    ...
]

 

그리고 RESTful 을 위해서 App 이라는 모델을 만들기로 해요.

# project/app/models.py

from django.db import models

# Create your models here.
class App(models.Model):
    name = models.CharField(max_length=50)
    description = models.TextField()

모델을 만들었으면 마이그레이션도 시켜줘요.

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

 

다음은 RESTful Framework 에서 JSON 으로 데이터를 전달하기 위한 serializer 를 새로 만들어야 해요.

# project/app/serializers.py

from rest_framework import serializers
from .models import App

class AppSerializer(serializers.ModelSerializer):
    class Meta:
        model = App
        fields = ['name', 'description'] # fields = '__all__'

이 코드는 App 모델에서 name, description 에 해당하는 field 를 가져오도록 하는 serializer 에요. 만약에 그냥 모든 필드를 가져오고 싶다면 __all__ 을 사용해요.

 

이렇게 만든 serializer 를 views.py 에 적용해요.

# project/app/views.py

from rest_framework import viewsets
from .models import App
from .serializer import AppSerializer

# Create your views here.
class AppViewSet(viewsets.ModelViewSet):
    queryset = App.objects.all()
    serializer_class = AppSerializer

뷰를 위해서 AppViewSet 이라는 클래스를 생성했어요. serializer 는 기본적으로 클래스에 기반한 뷰를 사용해요. 이를 CBV 라고 불러요. 반대 개념으로 함수 기반 뷰 FBV 가 있어요.

 

Class-based views | Django documentation | Django

The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are

docs.djangoproject.com

 

urls.py 도 수정해야 해요.

# project/project/urls.py

from django.contrib import admin
from django.urls import path, include
import app.urls

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

    path('', include('app.urls')),
]
# project/app/urls.py

from django.urls import path, include
from rest_framework.routers import DefaultRouter
from . import views

# router 를 새로 만든다.
router = DefaultRouter()
router.register('App', views.AppViewSet)

urlpatterns = [
    path('', include(router.urls))
]

 

여기까지 성공적으로 했다면 Django 페이지가 Django RESTful 페이지로 변해 있을거에요. 그럼 성공이에요.

 

왼쪽이 원래 Django 페이지, 오른쪽은 RESTful Framework 를 적용한 Django 페이지