首页 > 其他分享 >基于视图集实现接口

基于视图集实现接口

时间:2022-10-24 17:35:35浏览次数:47  
标签:基于 views get 接口 re path 图集 view

基于视图集实现接口

12.1 视图集的简介

使用视图集ViewSet,可以将一系列逻辑相关的动作放到一个类中:

  • list() 提供一组数据
  • retrieve() 提供单个数据
  • create() 创建数据
  • update() 保存数据
  • destory() 删除数据

ViewSet视图集类不再实现get()、post()等方法,而是实现动作 action 如 list() 、create() 等。

视图集只在使用as_view()方法的时候,才会将action动作与具体请求方式对应上。如:

class BookInfoViewSet(viewsets.ViewSet):

    def list(self, request):
        ...

    def retrieve(self, request, pk=None):
        ...

在设置路由时,我们可以如下操作

urlpatterns = [
    url(r'^books/$', BookInfoViewSet.as_view({'get':'list'}),
    url(r'^books/(?P<pk>\d+)/$', BookInfoViewSet.as_view({'get': 'retrieve'})
]

12.2 常用视图集父类

(1) ViewSet

继承自APIView,作用也与APIView基本类似,提供了身份认证、权限校验、流量管理等。

在ViewSet中,没有提供任何动作action方法,需要我们自己实现action方法。

(2)GenericViewSet

继承自GenericAPIView,作用也与GenericAPIVIew类似,提供了get_object、get_queryset等方法便于列表视图与详情信息视图的开发。

(3)ModelViewSet

继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin、CreateModelMixin、UpdateModelMixin、DestoryModelMixin。

(4)ReadOnlyModelViewSet

继承自GenericAPIVIew,同时包括了ListModelMixin、RetrieveModelMixin。

12.3 视图集的使用

视图

"""使用视图集"""
from rest_framework.viewsets import ReadOnlyModelViewSet, ModelViewSet


class StudentReadOnlyModelViewSet(ReadOnlyModelViewSet, CreateModelMixin, UpdateModelMixin, DestroyModelMixin):
    queryset = studentsInfo.objects.all()
    serializer_class = StudentModelSerializer


class StudentModelViewset(ModelViewSet):
    queryset = studentsInfo.objects.all()
    serializer_class = StudentModelSerializer

两个视图拥有相同的功能,但是使用不同的视图集实现的。

路由

from django.urls import path, re_path
from . import views
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register("students6", views.StudentModelViewset, basename="students6")


urlpatterns = [
    # APIView
    path('students/', views.StudentView.as_view()),
    re_path(r'^students/(?P<pk>\d+)/$', views.StudentAPIView.as_view()),

    # GenericAPIView
    path('students2/', views.StudentGenericAPIView.as_view()),
    re_path(r'^students2/(?P<pk>\d+)/$', views.StudentGenericAPIView2.as_view()),

    # GenericAPIView和mixin
    path('students3/', views.StudentGenericAPIViewMixin.as_view()),
    re_path(r'^students3/(?P<pk>\d+)/$', views.StudentGenericAPIViewMixin2.as_view()),

    # GenericAPIView和mixin
    path('students4/', views.StudentView1.as_view()),
    re_path(r'^students4/(?P<pk>\d+)/$', views.StudentView2.as_view()),

    # 视图集 ReadOnlyModelViewSet,此种方法比较麻烦,只是为了了解
    path('students5/', views.StudentReadOnlyModelViewSet.as_view(
        {
            "get": "list",
            "post": "create"
        }
    )),
    re_path(r'^students5/(?P<pk>\d+)/$', views.StudentReadOnlyModelViewSet.as_view({
        "get": "retrieve",
        "put": "update",
        "delete": "destroy",
    })),
] + router.urls

标签:基于,views,get,接口,re,path,图集,view
From: https://www.cnblogs.com/minqiliang/p/16822174.html

相关文章

  • OpenAPI 接口幂等实现
    OpenAPI接口幂等实现1、幂等性是啥?进行一次接口调用与进行多次相同的接口调用都能得到与预期相符的结果。通俗的讲,创建资源或更新资源的操作在多次调用后只生效一次。......
  • List接口的常用方法和遍历方式
    packagecom.msb.test01;importjava.util.ArrayList;importjava.util.Iterator;/***@author:liu*日期:16:47:13*描述:IntelliJIDEA*版本:1.0*/p......
  • 使用DRF实现五个api接口
    使用DRF实现五个api接口2.1新建appdjango-adminstartappapp012.2配置环境#注册app01和rest_framework,由于drf提供了web调试界面,所以静态文件功能不能注释掉,不然......
  • httppost请求jwt接口,basic认证
    ///<summary>///jwt验证接口///</summary>///<paramname="url"></param>///<paramname="data"></param>///<ret......
  • 基于STM32的串口收发讲解(HAL库)#打卡不停更#
    (基于STM32的串口收发程序(HAL库))介绍串口(UART通用异步收发器,TTL)通讯是一种设备间的串行全双工通讯方式。由于UART是异步传输,没有传输同步时钟,为了保证数据的正确性,UART采......
  • 基于git和markdown的个人笔记
    吹一波Onenote,用了很多年了,体验是最好的。但是他不支持Linux,这个非常难受。需求全平台通用,win/mac/linux,我会在这三种平台下写笔记。手机端很少用,甚至查看都很少用。支......
  • Colletion接口常用方法
    packagecom.msb.test01;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.Collection;importjava.util.List;/***@author:liu*日......
  • MD接口文档
    示例接口地址:/demo返回格式:JSON请求方式:POST接口备注:这是一个接口文档示例请求参数说明:名称类型必填(Y/N)说明pwstringY密码JSON请求......
  • 探究基于声明的身份标识
       大多数企业应用程序都需要一些基本用户安全功能。它们至少需要验证其用户身份,其中有很多还需要授权访问特定功能,以便只有那些有特权的用户才能使用它们。有些应用程......
  • 浅谈基于无线物联网技术的分布式配电室远程监控系统研究
    陈盼安科瑞电气股份有限公司上海嘉定201801 摘要:为解决现有配电室监控系统在实际应用中存在配电室各监控参数采集结果误差较大问题,设计一种新的监控系统,实验证明能够有效......