ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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์„ ์‚ฌ์šฉํ•˜๋ฉด......

    1. ๋ฐ˜๋ณต๋˜๋Š” ๋กœ์ง์„ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.
      ์œ„์˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ, queryset์„ ํ•œ ๋ฒˆ๋งŒ ๋ช…์‹œํ•ด ์ฃผ๋ฉด ๋˜๊ณ  ์ดํ›„์—” ๋‹ค์–‘ํ•œ ๋ทฐ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    2. ๋ผ์šฐํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด URL์„ ์ˆ˜๋™์œผ๋กœ ๋“ฑ๋กํ•ด ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค.

    ์ฐธ๊ณ : https://www.django-rest-framework.org/api-guide/viewsets/

     

    ๋Œ“๊ธ€

Designed by Tistory.