Part 1. ViewSet >> 能夠自動幫忙把BookList 和 BookDetail 寫在一塊兒。django
from rest_framework import viewsets # class PublisherList(generics.ListCreateAPIView): # queryset = Publisher.objects.all() # serializer_class = PublisherSerializer # permissions_classes = (permissions.IsAuthenticated, # IsOwnerOrReadOnly) # # def perform_create(self, serializer): # serializer.save(operator=self.request.user) # # # class PublisherDetail(generics.RetrieveUpdateDestroyAPIView): # queryset = Publisher.objects.all() # serializer_class = PublisherSerializer # permissions_classes = (permissions.IsAuthenticated, # IsOwnerOrReadOnly) class PublisherViewSet(viewsets.ModelViewSet): queryset = Publisher.objects.all() serializer_class = PublisherSerializer permissions_classes = (permissions.IsAuthenticated, IsOwnerOrReadOnly) def perform_create(self, serializer): serializer.save(operator=self.request.user) # class BookList(generics.ListCreateAPIView): # queryset = Book.objects.all() # serializer_class = BookSerializer # permissions_classes = (permissions.IsAuthenticated,) # # # class BookDetail(generics.RetrieveUpdateDestroyAPIView): # queryset = Book.objects.all() # serializer_class = BookSerializer # permissions_classes = (permissions.IsAuthenticated, ) class BookViewSet(viewsets.ModelViewSet): queryset = Book.objects.all() serializer_class = BookSerializer permissions_classes = (permissions.IsAuthenticated,)
from django.urls import path, include from helloworld import views book_list = views.BookViewsets.as_view({ 'get': 'list', 'post': 'create' }) book_detail = views.BookViewsets.as_view({ 'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy' }) urlpatterns = [ path('', views.api_root), path('b/', book_list, name="book-list"), path('b/<int:pk>/', book_detail, name="book-detail") ]
Part 2. 經過viewset + router. 再簡便代碼。api
views.py 不須要更改。 只要改動app/urls.py 便可。app
from django.urls import path, include from helloworld import views from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('b', views.BookViewSet) router.register('p', views.PublisherViewSet) urlpatterns = [ #path('', views.api_root), path('', include(router.urls)), ]
Part 3. 自動寫文檔ide
1. 安裝一個包post
pip install coreapi
2. 只改動urls.pyurl
from rest_framework.routers import DefaultRouter from rest_framework.schemas import get_schema_view from rest_framework.documentation import include_docs_urls schema_view = get_schema_view(title="Hello world API") router = DefaultRouter() router.register('b', views.BookViewSet) router.register('p', views.PublisherViewSet) urlpatterns = [ path('', include(router.urls)), path('schema', schema_view), path('docs', include_docs_urls(title="Helloword Doc")) ]