[Django REST Framework] Viewset

moning02004·2020년 5월 18일
0

Django REST Framework

목록 보기
2/3

차근차근 개발 이야기를 시작해보자. 기존에 Django에서 urls.py를 작성한 모습은 restful하다고 못한다. 왜냐하면 행위가 url에 써있기 때문이다.

urlpatterns = [
    # in Django
    path('', views.PostListView.as_view()),
    path('<int:pk>', views.PostDetailView.as_view()),
    path('<int:pk>/edit', views.PostUpdateView.as_view()),
    path('<int:pk>/delete', views.PostDeleteView.as_view()),
    
    # in DRF
    path('', views.PostListViewset.as_view({
        'get': 'list',
        'post': 'create'
    })),
    path('<int:pk>', views.PostDetailViewset.as_view({
    	'get': 'retrieve',
        'patch': 'partial_update',
        'put': 'update',
        'delete': 'delete'
    })),
]

URL 형식은 하나만 가능했다. 메서드에 따라 들어가는 것이 아니었다. 그래서 Viewset을 사용하였다. Viewset은 말 그대로 view의 집합인 것이었다.

사용

class PostListViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    permission_classes = [IsAuthenticatedOrReadOnly]


    def get_serializer_class(self):
        if self.action == 'list':
            return PostListSerializer
        elif self.action == 'create':
            return PostCreateSerializer

Django와는 조금 다른 모습으로 구현된다. permission_classes는 인증과 인가를 나타낸다.

  1. AllowAny
    모든 요청 접근

  2. IsAuthenticated
    로그인된 요청만 접근

  3. IsAuthenticatedOrReadOnly
    로그인된 요청이 아니면 읽기만 가능

  4. IsAdmin
    is_staff가 True인 요청만 접근

이 네 가지를 많이 사용하고 커스텀 클래스를 사용하기도 한다.

profile
Django

0개의 댓글