카테고리 없음

django-restframework 맛보기

두잇 두두 2023. 12. 28. 21:28
728x90

먼저 프로젝트를 진행하기 전에 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를 한번 정독하는 방향으로 진행할 예정입니다