[Django REST] Django REST Framework 시작하기

지니🧸·2022년 10월 18일
0

Django REST

목록 보기
2/5

Django REST Framework

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

Serializers

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']

Views

quickstart 앱 내의 views.py에 뷰 생성

  • view를 한개씩 만드는 대신 ViewSets 클래스로 묶어서 만들어서 로직을 깔끔하게 정리
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]

URLs

tutorial 프로젝트 내의 urls.py에 API URLs 정리

  • view 대신 viewset을 사용했기에 viewset을 router 클래스에 등록해서 API를 위한 URL configuration 자동 생성 가능
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'))
]

Pagination

  • 페이지당 오브젝트 개수 설정
  • tutorial 프로젝트의 settings.py에서 설정
REST_FRAMEWORK = {
	'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

Settings

settings.py의 INSTALLED_APPS에 'rest_framework' 추가

INSTALLED_APPS = [
	...
    'rest_framework',
]

참고: Django REST Framework 공식 문서

profile
우당탕탕

0개의 댓글