GitHub
ViewSets & Routers
Django rest framework는 관련된 뷰들의 집합을 ViewSet으로 불리는 하나의 클래스로 로직을 합할 수 있게 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| ...
from rest_framework import viewsets
# MemoList + MemoDetail => MemoViewSet
class MemoViewSet(viewsets.ModelViewSet):
queryset = Memo.objects.all()
serializer_class = MemoSerializer
permission_classes = (permissions.IsAuthenticatedOrReadOnly, IsOwnerOrReadOnly)
def perform_create(self, serializer):
serializer.save(owner=self.request.user
# UserList + UserDetail => UserViewSet
class UserViewSet(viewsets.ReadOnlyModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| ...
from app.views import MemoViewSet, UserViewSet
from rest_framework import renderers
memo_list = MemoViewSet.as_view({
'get': 'list',
'post': 'create'
})
memo_detail = MemoViewSet.as_view({
'get': 'retrieve',
'put': 'update',
'delete': 'destroy'
})
user_list = UserViewSet.as_view({
'get': 'list'
})
user_detail = UserViewSet.as_view({
'get': 'retrieve'
})
urlpatterns = [
url(r'^memo$', memo_list, name='memo-list'),
url(r'^memo/(?P<pk>[0-9]+)$', memo_detail, name='memo-detail'),
url(r'^users$', user_list, name='user-list'),
url(r'^users/(?P<pk>[0-9]+)$', user_detail, name='user-detail'),
]
...
|
Routers
rest framework의 DefaultRouter를 이용해 urls.py를 아래처럼 수정해 간단한 코드로 라우팅을 할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
| from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
from app import views
router = DefaultRouter()
router.register(r'memo', views.MemoViewSet)
router.register(r'users', views.UserViewSet)
urlpatterns = [
url(r'^', include(router.urls))
]
|
댓글남기기