Django REST Framework: 웹 API를 개발하기 위한 툴킷
pip로 설치하기
pip install djangorestframework
pip install markdown
pip install django-filter
INSTALLED_APPS 설정에 'rest_framework' 추가
INSTALLED_APPS = [
...
'rest_framework',
]
REST framework의 로그인/로그아웃 뷰 추가
urlpatterns = [
...
path('api-auth/', include('rest_framework.urls'))
]
'tutorial'이라는 장고 프로젝트 생성하고 'quickstart'이라는 앱 시작하기
# 프로젝트 디렉토리 생성하기
mkdir tutorial
cd tutorial # 튜토리얼로 이동
# 패키지 디펜던시를 분리할 가상환경 생성하기
python3 -m venv env
source env/bin/activate
# 가상환경에 장고와 장고 레스트 프레임워크 설치
pip install django
pip install djangorestframework
# 프로젝트와 앱 시작
django-admin startproject tutorial .
cd tutorial
django-admin startup quickstart
cd ..
데이터베이스 연동하기
python manage.py migrate
슈퍼유저 생성하기
python manage.py createsuperuser --email admin@example.com --username admin
quickstart 앱 내에 serializers 모듈 생성 > 데이터 표현에 활용
from django.contrib.auth.models import User, Group
from rest_framework import serializers
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ['url', 'username', 'email', 'groups']
class GroupSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Group
fields = ['url', 'name']
quickstart 앱 내의 views.py에 뷰 생성
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from rest_framework import permissions
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
user를 보거나 수정할 수 있는 API 엔드포인트
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
group을 보거나 수정할 수 있는 API 엔드포인트
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
tutorial 프로젝트 내의 urls.py에 API URLs 정리
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# 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'))
]
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
settings.py의 INSTALLED_APPS에 'rest_framework' 추가
INSTALLED_APPS = [
...
'rest_framework',
]
참고: Django REST Framework 공식 문서