본문 바로가기
아카이브

DRF - Django REST Framework 튜토리얼

by PilYeooong 2020. 2. 4.


Django에서 백엔드 개발에 쓰이는 Django REST Framework의 튜토리얼을 진행해 보았습니다.

https://www.django-rest-framework.org/tutorial/quickstart/

 

DRFtutorial 디렉토리


실습 진행을 위한 디렉토리의 이름입니다. 
Django의 기초를 다루는 부분은 아니기 때문에 가상환경 생성이나 패키지 설치, 프로젝트 세팅과 같은 부분들은 이 글에서는 생략토록 하겠습니다.

첫번째로, DRF사용을 위해 패키지를 설치합니다.

DRF 패키지 설치
앱 생성


패키지 설치 후, 튜토리얼 진행을 위한 앱을 하나 만들어줍니다.
저는 quickstart라는 이름의 앱을 생성하였습니다. (앱은 원하시는 이름으로 생성하셔도 무방합니다)

패키지 설치, 앱을 만드신 후에는 반드시 setting.py 등록해주셔야합니다.

INSTALLED_APPS에 추가
superuser 생성


여기까지가 튜토리얼의 기본적인 세팅입니다.

 


 


quickstart앱 안에 serializers.py 파일을 생성하여, 코드를 작성합니다.

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


여기서 serializerserialize는 '직렬화'라는 단어입니다.
serializerqueryset, 모델 인스턴스와 같은 데이터를 JSON, XML 또는 다른 컨텐츠 유형으로 변환할 수 있도록 해주는 역할을 담당합니다.
예를 들어, 파이썬 데이터를 요즘 흔히 사용되는 js프레임워크 내에서도 읽고, 수정 할 수 있는 데이터 형태로 바꾸어 주는 역할이라고 보시면 됩니다.
반대로 Deserialize는 변환된 데이터를, 원상태로 다시 되돌려 주는 '역직렬화'로 이해하시면 될 것 같습니다.

이 코드에서는 User모델이 가지고있는 'url', 'username', 'email', 'groups'가 직렬화 되도록 작성이 됬습니다.
Group 모델도 마찬가지로 'url', 'name'이 직렬화 되어 나타나겠죠?


다음은, views.py에 코드를 작성합니다.

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from .serializers import UserSerializer, GroupSerializer


class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewSet(viewsets.ModelViewSet):
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

viewset을 사용하여 코드를 사용하였습니다.
코드 내용은  UserGroupqueryset, 이전에 작성한 serializer가 활용되어 쓰이네요.

마지막으로 urls.py에 추가를 해줍니다. 프로젝트 폴더내의 urls.py에 코드를 작성합니다.

from django.urls import include, path
from rest_framework import routers
from quickstart.views import UserViewSet, GroupViewSet

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'groups', GroupViewSet)

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


DefaultRouter
를 사용하여 usersgroups의 데이터를 담을 urlrouter에 등록하였습니다.
api-auth/ 부분은 api 페이지에서의 로그인/로그아웃을 다루기 위해 추가된 부분으로 보시면 됩니다. 

이제 코드작성은 끝났습니다. 서버를 실행시킵니다.

Api Root



router
에 등록해둔 usergroupapi root에 보이네요. users 링크를 클릭해 들어가보면 user 관련 정보를 볼 수 있습니다.


User List


superuser로서 생성했던 admin과 테스트를 위해 생성한 유저인 test가 보이네요.
이 url이 허용하는 request method들도 나열 되어있고, 컨텐츠의 타입도 표시되고 있습니다.

밑에 보이는 양식을 통해서도 유저를 생성할 수 있습니다.

프론트엔드와 연동시에, 이 url로 적절한 Form data와 함께 post 요청해오면, 유저가 생성됩니다.


 

현재 머물고 있는 User List URL에서 상세정보를 보고자 하는 유저의 id를 입력하면 해당 유저의 상세페이지로 들어가실수 있습니다.
ex) localhost:8000/users/1/

lookup_field 정의를 통해 id가 아닌 username을 통해서도 접근할 수 있도록 변경도 가능합니다.
ex) viewset코드에 lookup_field = "username" 추가 후 localhost:8000/users/(username)/ 

User Detail


해당 유저의 정보를 수정할수도 있고, 삭제 또한 가능한 페이지가 나옵니다.

 

튜토리얼의 모든 부분을 다루진 않았지만, 어느정도 이해에 도움이 되셨으면 해서 나름대로의 정리 및 작성을 해보았습니다.
DRF를 좀 더 깊게 다뤄보실 예정이라면, 공식 문서를 꼭 한번 훑어보시며 살펴 보실 것을 추천 드립니다 !

감사합니다.

'아카이브' 카테고리의 다른 글

200207 / TIL  (0) 2020.02.07
200205 / TIL  (0) 2020.02.06
200203 / TIL  (0) 2020.02.04
200131 / TIL  (0) 2020.01.31
200130 / TIL  (0) 2020.01.30