-
[Django][DRF] ViewSets์ ๊ฐ๋ TECH 2021. 7. 9. 00:08
ํ์ฌ ๋๋ ์ฅ๊ณ ์ ๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํด ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐ ์ค์ด๋ค.
๋ฐฑ์๋๋ฅผ ์ฅ๊ณ ๋ก ๊ตฌํํ๋ ์ค, ์ฌ๋ฌ ์ด๋ ค์๋ค์ด ์๊ฒจ ์ฅ๊ณ ๋ฅผ ๋ ํํํ ์ ๋ฆฌํด ๋ณด๊ณ ์ ํ๋ค.
๋ณธ ๋ด์ฉ์ 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/
'TECH' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] sort, sorted ํจ์์์ ๋๋ค ํํ์์ผ๋ก ์กฐ๊ฑด ์ง์ ํ๊ธฐ (0) 2021.07.22 [python] ๋ฌธ์์ด ์ฌ๋ผ์ด์ฑ ์ฌ์ฉํ๊ธฐ (0) 2021.07.19 [Error] React axios post 415 error (0) 2021.06.11 [์ฅ๊ณ ์ค๋ฅ] NoReverseMatch at / (0) 2020.05.22 [Error] git LF will be replaced by CRLF in ํ์ผ๋ช (0) 2020.05.21 - ๋ฐ๋ณต๋๋ ๋ก์ง์ ํ๋์ ํด๋์ค๋ก ๋ฌถ์ ์ ์๋ค.