在第一个 API 中我们编写的 View,不知道大家有没有觉得非常简洁呢,好像没有写什麽代码,但是就完成了 GET, POST 的功能,这就是 Viewset 的威力了。今天就带大家了解一下 Viewset 在做什麽,以及如何使用!
在 web 当中有许多常见的功能,以及常使用的逻辑,DRF便将其进行整合进一个 class 方便开发者调用
优点
若要建立,一般我们需要在 class 定义对应的 function
from .models import Products
from .serializers import ProductSerializer
from rest_framework import viewsets
from rest_framework.response import Response
class ProductViewSet(viewsets.ViewSet):
"""
A simple ViewSet for listing or retrieving users.
"""
def list(self, request):
queryset = Products.objects.all()
serializer = ProductSerializer(queryset)
return Response(serializer.data)
而 viewset 中自己定义了六种 method ,因此我们只要获取一次 query 以及 serializer ,Viewset 将会为我们处理好以下 Method 的功能
若想要客制化功能,可以透过修改 function 再进行修改
class ProductViewSet(viewsets.ViewSet):
"""
Example empty viewset demonstrating the standard
actions that will be handled by a router class.
If you're using format suffixes, make sure to also include
the `format=None` keyword argument for each action.
"""
def list(self, request):
pass
def create(self, request):
pass
def retrieve(self, request, pk=None):
pass
def update(self, request, pk=None):
pass
def partial_update(self, request, pk=None):
pass
def destroy(self, request, pk=None):
pass
viewsets 可以自行定义对应路径
product_list = ProductViewSet.as_view({'get': 'list'})
但通常我们不会这麽做,我们会透过 router 帮助我们自动对应路径。
from .views import ProductViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'products', ProductViewSet, basename='product')
urlpatterns = router.urls
router 会自动对应到各个路径 相关的 Method !
Viewsets 可以帮助我们有效率且清楚的处理许多常见的业务逻辑。Viewsets 按照不同功能,有不同的 Viewsets 可以进行选用,像是 GenericViewSet, ModelViewSet 等。我们越熟习这些工具,有助於我们增进开发的效率以及质量。
参考资料
https://www.django-rest-framework.org/api-guide/viewsets/#viewset
<<: IOS、Python自学心得30天 Day-29 连接Firebase辨识
今天沙滩车太累ㄌ好想弃赛 透过这八堂课,也算是对分散式系统有一些初步认识, 之後再找时间接着看 M...
Bug 在 debug 之前我们要知道什麽是 bug。 请勾选属於 bug 的东西: [ ] 正常网...
前言 今天继续看看 event loop 的核心循环, uv_run() , 可以查看以下网址 ht...
我使用的版本是python3.8.6,示范安装用的目前(20210721)最新的版本 首先到官网下载...
HTML5新增的input类型: <!-- 需添加form表单域 --> <for...