[Django][DRF] ViewSets์ ๊ฐ๋
ํ์ฌ ๋๋ ์ฅ๊ณ ์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐ ์ค์ด๋ค.
๋ฐฑ์๋๋ฅผ ์ฅ๊ณ ๋ก ๊ตฌํํ๋ ์ค, ์ฌ๋ฌ ์ด๋ ค์๋ค์ด ์๊ฒจ ์ฅ๊ณ ๋ฅผ ๋ ํํํ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํ๋ค.
๋ณธ ๋ด์ฉ์ Django REST Framework ๊ณต์ ๋ฌธ์๋ฅผ ๋ฒ์ญํ ๊ธ์ด๋ค.
๊ณต์ ๋ฌธ์๋ฅผ ๋ฒ์ญํ๋ ๊ณผ์ ์์ ๋ฌธ์ฅ์ด ๋งค๋๋ฝ์ง ์์ ์ ์๋ค. ^^;
Viewset
Django REST ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ๋ฉด ViewSet์ ์ฌ์ฉํด ํด๋์ค ์์์ ๊ด๋ จ์๋ ๋ทฐ๋ค์ ๋ํ ๋ก์ง์ ํฉ์น ์ ์๋ค. ๋ค๋ฅธ ํ๋ ์์ํฌ์์๋ ๊ฐ๋ ์ ์ผ๋ก ์ ์ฌํ ๊ตฌํ์ธ '๋ฆฌ์์ค'๋ '์ปจํธ๋กค๋ฌ'์ ์ ์ฌํ ๊ฐ๋ ์ด๋ค.
ViewSet ํด๋์ค๋ ํด๋์ค ๊ธฐ๋ฐ View์ ํ ์ ํ์ด๊ณ , .get()์ด๋ .post() ๊ฐ์ ๋ฉ์๋ ํธ๋ค๋ฌ ๋์ .list() ๋ฐ .create()๋ฅผ ์ ๊ณตํ๋ค.
ViewSet์ ๋ฉ์๋ ํธ๋ค๋ฌ๋ .as_view() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ทฐ๋ฅผ ๋๋ด๋ ์์ ์๋ง ํด๋นํ๋ ์ก์ ์ ์ํํ๋ค.
์ผ๋ฐ์ ์ผ๋ก, urlconf์ viewset์ ๋ทฐ๋ฅผ ๋ช ์์ ์ผ๋ก ๋ฑ๋กํ๋ ๋์ , ์๋์ผ๋ก urlconf๋ฅผ ๊ฒฐ์ ํ ๋ผ์ฐํฐ ํด๋์ค์ viewset์ ๋ฑ๋กํ๋ค.
from django.contrib.auth.models import User
from django.shortcuts import get_object_or_404
from myapps.serializers import UserSerializer
from rest_framework import viewsets
from rest_framework.response import Response
class UserViewSet(viewsets.ViewSet):
"""
A simple ViewSet for listing or retrieving users.
"""
def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)
def retrieve(self, request, pk=None):
queryset = User.objects.all()
user = get_object_or_404(queryset, pk=pk)
serializer = UserSerializer(user)
return Response(serializer.data)
user_list = UserViewSet.as_view({'get': 'list'})
user_detail = UserViewSet.as_view({'get': 'retrieve'})
ํ์ํ๋ค๋ฉด ํด๋์ค ์ ์ธ ํ ์ ๊ตฌ๋ฌธ์ ์ฝ์ ํ์ฌ ๋ ๊ฐ์ ๋ทฐ๋ก ๋ถ๋ฆฌํ ์ ์๋ค๊ณ ํ๋ค.
ํ๋ก์ ํธ ํด๋ ๋ด์ urls.py
ํ์ผ์
Viewset์ ๋ผ์ฐํฐ์ ํจ๊ป ๋ฑ๋กํด, urlconf๊ฐ ์๋์ผ๋ก ์์ฑ๋ ์ ์๋๋ก ํด ์ค๋ค.
from myapp.views import UserViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'users', UserViewSet, basename='user')
urlpatterns = router.urls
class UserViewSet(viewsets.ModelViewSet):
"""
A viewset for viewing and editing user instances.
"""
serializer_class = UserSerializer
queryset = User.objects.all()
์์ฒ๋ผ Viewset์ ์ง์ ๋ง๋๋ ๋์ ์, ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ๋ฌ ๋ฉ์๋๋ฅผ ์ ๊ณตํด ์ฃผ๋ ํด๋์ค๋ค์ ์ฌ์ฉํ ์๋ ์๋ค.
View ๋์ Viewset์ ์ฌ์ฉํ๋ฉด......
- ๋ฐ๋ณต๋๋ ๋ก์ง์ ํ๋์ ํด๋์ค๋ก ๋ฌถ์ ์ ์๋ค.
์์ ์์์ฒ๋ผ, queryset์ ํ ๋ฒ๋ง ๋ช ์ํด ์ฃผ๋ฉด ๋๊ณ ์ดํ์ ๋ค์ํ ๋ทฐ๋ก ์ฌ์ฉํ ์ ์๋ค. - ๋ผ์ฐํฐ๋ฅผ ์ฌ์ฉํ๋ฉด URL์ ์๋์ผ๋ก ๋ฑ๋กํด ์ค ํ์๊ฐ ์๋ค.
์ฐธ๊ณ : https://www.django-rest-framework.org/api-guide/viewsets/