Django REST framwork-06-使用 ViewSets 视图集和 Routers 路由

Posted shark_西瓜甜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django REST framwork-06-使用 ViewSets 视图集和 Routers 路由相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

GenericViewSet

重写了 .as_view 方法,和 DRF 的 Routers 结合,可以简化路由配置。

返回一组列表数据

定义视图

from rest_framework import viewsets

class ServerViewSet(
    mixins.ListModelMixin,viewsets.GenericViewSet):
    '''Viewsets.GenericViewSet 实现服务器列表'''
    queryset = Server.objects.all()
    serializer_class = ServerSerializer

注册路由

api/urls.py

from django.urls import path, include, re_path

from . import views

from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'servers-router', views.ServerViewSet)

urlpatterns = [
        path('', include(router.urls)),
]

访问

http://127.0.0.1/api/server-router

ReadOnlyModelViewSet

查一组列表数据和具体一个对象的详情数据(字典类型)

对象详情数据,是通过路由传递主键 id 的值,之后利用 DRFRouters 注册的方式,不需要再添加额外的路由。
就是说列表数据和详情数据,只要注册一次路由即可。

源码

class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
                           mixins.ListModelMixin,
                           GenericViewSet):
    """
    A viewset that provides default `list()` and `retrieve()` actions.
    """
    pass

ModelViewSet

集成如下功能:

  1. 增删改
  2. 查一组数据
  3. 查单个数据

源码

ModelViewSet 源码

class ModelViewSet(mixins.CreateModelMixin,
                   mixins.RetrieveModelMixin,
                   mixins.UpdateModelMixin,
                   mixins.DestroyModelMixin,
                   mixins.ListModelMixin,
                   GenericViewSet):
    """
    A viewset that provides default `create()`, `retrieve()`, `update()`,
    `partial_update()`, `destroy()` and `list()` actions.
    """
    pass

GenericViewSet 源码

class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
    """
    The GenericViewSet class does not provide any actions by default,
    but does include the base set of generic view behavior, such as
    the `get_object` and `get_queryset` methods.
    """
    pass

以上是关于Django REST framwork-06-使用 ViewSets 视图集和 Routers 路由的主要内容,如果未能解决你的问题,请参考以下文章

Django REST API:使特定权限级别的字段只读

Django Rest Framework 使 OnetoOne 关系感觉就像是一个模型

如何使 Django REST JWT 身份验证与多个 Web 服务器一起扩展?

如何使 Vue.js 将散列密码发布到 Django REST API AbstractBaseUser 自定义模型?

jwt令牌的刷新如何在django REST angular中工作

Django rest framework JWT ,删除 jwt 令牌