ViewSets

dooh kim·2020년 2월 19일
0

generic 중복되는 queryset 과 serialzier를 줄이기 위해서 ViewSets 사용

from rest_framework import generics

from snippets.models import Snippet
from snippets.serializers import SnippetSerializer


class SnippetListCreateAPIView(generics.ListCreateAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer


class SnippetRetrieveUpdateDestroyAPIView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

ViewSets code

from rest_framework import viewsets

from snippets.models import Snippet
from snippets.serializers import SnippetSerializer


class SnippetViewSet(viewsets.ModelViewSet):
    queryset = Snippet.objects.all()
    serializer_class = SnippetSerializer

Router

(url 중복제거 , 접두어를 통해 router 역할 함)

이건 tutorial code

router = DefaultRouter()
router.register(r'snippets', viewsets.SnippetViewSet)

urlpatterns_viewset = [
    path('snippets/', viewsets.SnippetViewSet.as_view({
        'get': 'list',
        'post':'create',
    })),
    path('snippets/<int:pk>/', viewsets.SnippetViewSet.as_view({
        'get' : 'retrieve',
        'patch': 'partial_update',
        'delete': 'destroy',
    })),
]


urlpatterns_api_view = [
    path('snippets/', generic.SnippetListCreateAPIView.as_view()),
    path('snippets/<int:pk>/', generic.SnippetRetrieveUpdateDestroyAPIView.as_view()),

]
urlpatterns = [
    path('api-view', include(urlpatterns_api_view)),
    path('viewset/', include(urlpatterns_viewset)),
    path('router/', include(router.urls)),
]

아직 해보지 않음 이런 경우 어떻게 해야하는가?

router = DefaultRouter()
router.register(r'snippets', viewsets.SnippetViewSet)
router.register(r'posts', viewsets.PostViewSet)

urlpatterns_viewset = [
    path('snippets/', viewsets.SnippetViewSet.as_view({
        'get': 'list',
        'post':'create',
    })),
    path('snippets/<int:pk>/', viewsets.SnippetViewSet.as_view({
        'get' : 'retrieve',
        'patch': 'partial_update',
        'delete': 'destroy',
    })),
]
urlpatterns_viewset = [
    path('posts/', viewsets.PostViewSet.as_view({
        'get': 'list',
        'post':'create',
    })),
    path('posts/<int:pk>/', viewsets.PostViewSet.as_view({
        'get' : 'retrieve',
        'patch': 'partial_update',
        'delete': 'destroy',
    })),
]

이런경우 어떤식으로 적용해야할지 나중에 해보자

profile
testify to the light

0개의 댓글