django rest frame work 初步使用 >> ViewSet + Router + DOCS

Part 1. ViewSet >> 可以自动帮忙把BookList 和 BookDetail 写在一起。

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,)
views.py
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")

]
urls.py

 

Part 2. 通过viewset + router. 再简便代码。

views.py 不需要更改。 只要改动app/urls.py 即可。

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)),
]
app/urls.py

 

Part 3. 自动写文档

1. 安装一个包

pip install coreapi

 

2. 只改动urls.py

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"))
]
app/urls.py

 

posted @ 2018-08-21 22:17  小小Guido妹  阅读(179)  评论(0编辑  收藏  举报