Django에서 백엔드 개발에 쓰이는 Django REST Framework의 튜토리얼을 진행해 보았습니다.
https://www.django-rest-framework.org/tutorial/quickstart/
실습 진행을 위한 디렉토리의 이름입니다.
Django의 기초를 다루는 부분은 아니기 때문에 가상환경 생성이나 패키지 설치, 프로젝트 세팅과 같은 부분들은 이 글에서는 생략토록 하겠습니다.
첫번째로, DRF사용을 위해 패키지를 설치합니다.
패키지 설치 후, 튜토리얼 진행을 위한 앱을 하나 만들어줍니다.
저는 quickstart라는 이름의 앱을 생성하였습니다. (앱은 원하시는 이름으로 생성하셔도 무방합니다)
패키지 설치, 앱을 만드신 후에는 반드시 setting.py에 등록해주셔야합니다.
여기까지가 튜토리얼의 기본적인 세팅입니다.
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']
여기서 serializer의 serialize는 '직렬화'라는 단어입니다.
serializer는 queryset, 모델 인스턴스와 같은 데이터를 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을 사용하여 코드를 사용하였습니다.
코드 내용은 User와 Group의 queryset, 이전에 작성한 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를 사용하여 users와 groups의 데이터를 담을 url을 router에 등록하였습니다.
api-auth/ 부분은 api 페이지에서의 로그인/로그아웃을 다루기 위해 추가된 부분으로 보시면 됩니다.
이제 코드작성은 끝났습니다. 서버를 실행시킵니다.
router에 등록해둔 user와 group이 api root에 보이네요. users 링크를 클릭해 들어가보면 user 관련 정보를 볼 수 있습니다.
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)/
해당 유저의 정보를 수정할수도 있고, 삭제 또한 가능한 페이지가 나옵니다.
튜토리얼의 모든 부분을 다루진 않았지만, 어느정도 이해에 도움이 되셨으면 해서 나름대로의 정리 및 작성을 해보았습니다.
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 |