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

本文介绍如何使用Django Rest Framework的视图集ViewSet简化RESTful API开发流程,包括自动处理列表和详情视图、简化URL配置以及自动生成API文档。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

转载于:https://www.cnblogs.com/shuo-yang0459/p/9514778.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值