Skip to content

2. Django REST framework


1. Django REST framework란

  • Django REST framework(이하 REST framework)는 웹 API 구축을 위한 툴킷이다.


2. Django REST framework 설치

  • REST framework는 Python과 Django가 설치되어 있어야 한다.


  • 먼저 다음과 같이 Django를 설치한다.


python -m pip install Django


  • 그리고 다음과 같이 REST framework를 설치한다.


pip install djangorestframework
pip install markdown      # Markdown support for the browsable API.
pip install django-filter # Filtering support


  • 다음의 패키지는 선택적으로 설치하면 된다.


1] PyYAML, uritemplate

  • Schema generation support.

2] Markdown

  • Markdown support for the browsable API.

3] Pygments

  • Add syntax highlighting to Markdown processing.

4] django-filter

  • Filtering support.

5] django-guardian

  • Object level permissions support.


3. Django REST framework 적용

  • Django 및 REST framework를 설치했다면 REST framework를 적용해야 한다.
  • 그 방법은 기본적으로, 프로젝트의 settings.py 파일 내의 INSTALLED_APPS 설정에 "rest_framework"를 추가한다.


settings.py
INSTALLED_APPS = [
    ...
    'rest_framework',
]


  • 만약 탐색 가능한 API(Browsable API)를 사용하는 경우 특정 애플리케이션의 urls.py 파일 아닌 프로젝트의 루트 urls.py 파일 내의 urlpatterns 리스트 변수에 다음과 같이 추가하면 된다.


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


4. Django REST framework 예시

  • REST framework를 사용하여 간단한 API를 빌드하는 간단한 예를 살펴보자.


  • 프로젝트 사용자에 대한 정보에 액세스하기 위한 읽기-쓰기 API를 만들 것이다.
  • REST framework API에 대한 모든 전역 설정은 REST_FRAMEWORK라는 단일 구성(Configuration) 딕셔너리에 저장된다.
  • settings.py 파일에 다음의 코드를 추가한다.


settings.py
REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    "DEFAULT_PERMISSION_CLASSES": [
        "rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly"
    ]
}


  • 이제 API를 만들 준비가 되었다.
  • 다음은 프로젝트의 루트 urls.py 파일에 다음의 코드를 작성한다.


urls.py
from django.urls import path, include
from django.contrib.auth.models import User
from rest_framework import routers, serializers, viewsets

# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ["url", "username", "email", "is_staff"]

# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r"users", UserViewSet)

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
    path("", include(router.urls)),
    path("api-auth/", include("rest_framework.urls", namespace="rest_framework"))
]


  • 위의 코드와 같이 작성한 후 http://127.0.0.1:8000/에 접속하면 "사용자" API를 확인할 수 있다.
  • 로그인 컨트롤을 사용하면 시스템에서 사용자를 추가, 생성 및 삭제할 수도 있다.

References