먼저 프로젝트를 진행하기 전에 setup을 시작해야겠죠
django project 이름으로 tutorial을 하고 app 이름을 quickstart로 지정하겠습니다
mkdir로 폴더를 만든 뒤 cd로 폴더에 진입합니다.
그 뒤 가상 환경을 만들어주는데 (파이썬의 경우 버젼과 관리하는 패키지가 달라 가상환경에서 작업합니다)
#TODO 가상환경 설명하기
python3 -m venv env
source env/bin/activate
# 윈도우의 경우
python -m venv env
env\Scripts\activate
이렇게 가상환경을 만들고 진입해 줍니다.
이렇게 앞에 (env)가 붙으면 가상환경에 진입이 된 것입니다.
pip install django
pip install djangorestframework
위 코드를 통해서 django와 DRF를 다운로드 해줍니다.
그 뒤 앞서 말한 장고 프로젝트를 시작해봅시다.
django-admin startproject tutorial . # Note the trailing '.' character
cd tutorial
django-admin startapp quickstart
cd .. #manage.py가 있는 위치로 가기 위함
이렇게 하면 폴더 구조가 이렇게 형성되게 됩니다
그럼 첫 번째로 db에 데이터를 만들어주는 migrate를 진행합니다
python manage.py migrate
또한 admin접속을 해서 데이터를 관리하기 위해서 superuser을 만들어줍니다
python manage.py createsuperuser --username admin --email admin@example.com
비밀번호의 경우 8자리 이상을 권장하지만 아니여도 y를 누르면 넘어가게 됩니다
그 뒤
Serializers를 만들어 보겠습니다.
이는 데이터를 변환해주는것으로 tutorial/quickstart/serializers.py 위치에 만들어줍니다
from django.contrib.auth.models import Group, User
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']
HyperlinkedModelSerializer #TODO 링크
그리고 View를 열어서 함수를 작성해보죠 tutorial/quickstart/views.py
from django.contrib.auth.models import Group, User
from rest_framework import permissions, viewsets
from tutorial.quickstart.serializers import GroupSerializer, UserSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
permission_classes = [permissions.IsAuthenticated]
위의 코드처럼 ViewSets 을 사용해 기능 별로 클래스화 해서 view 논리를 간결하고 보기좋게 정리할 수 있습니다.
그리고 API URL을 연결해서 한번 사용을 해봐야겠죠
urls.py를 열어서 tutorial/urls.py
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'))
]
urlpatterns += router.urls
를 작성해줍니다 위의 코드에서 routers를 사용하는데 우리는 뷰 대신 뷰셋을 사용하기 때문에 뷰셋을 라우터 클래스에 등록하면 API대한 URL conf를 자동으로 생성하여 url 패턴도 간결하게 유지 할 수 있습니다.
옵션으로 DRF는 pagenation을 제공하고 있습니다 default pagenation을 사용하려면 tutorial/settings.py 위치로 가셔서 아래의 코드를 추가해주시면 됩니다
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
그리고 기초인 rest_framework를 django INSTALLED_APPS 에 등록해주셔야 합니다.
python manage.py runserver
를 통해서 실행한 뒤 http://127.0.0.1:8000/ (열려있는 포트에 따라 다릅니다)에 접속하게 되면
위와 같은 화면이 나오고 users에 들어가게 되면
처음 이러한 화면이 나오는데 이는 DRF의 기본적인 보안 기능으로 권한이 없다는 것을 말해줍니다
위쪽 Log in을 통해서 아까 등록한 superuser을 통해 접속하면
앞서 등록한 superuser가 json 형태로 되있는 것을 볼 수 있습니다
{"count":1,"next":null,"previous":null,"results":[{"url":"http://127.0.0.1:8000/users/1/?format=json","username":"admin","email":"admin@example.com","groups":[]}]}
이렇게 별다른 코드를 치지 않았지만 데이터를 json으로 만들어주는 DRF 강력한 기능을 배워보았습니다.
앞으로 tutorial을 통해 좀 더 DRF에 대해서 자세히 배워보고 그 뒤 API 가이드를 통해 DRF Docs를 한번 정독하는 방향으로 진행할 예정입니다