zoukankan      html  css  js  c++  java
  • DRF使用ModelViewSet增删改查

    A、models.py 

    class TestScene(models.Model):
    test_scene_id = models.AutoField('测试场景id', primary_key=True)
    test_scene_name = models.CharField('测试场景名字', unique=True, max_length=300)
    case_group = models.ManyToManyField(to="CaseGroup")

    class Meta:
    verbose_name = '测试场景'
    verbose_name_plural = verbose_name

    def __str__(self):
    return self.test_scene_name

    B、VIEWSET

    from rest_framework import serializers
    from XXX.models import *

    class TestSceneSerializer(serializers.ModelSerializer):
    class Meta:
    model = TestScene
    fields = '__all__'

    C、VIEWSET实现的view

    from rest_framework import viewsets

    class SceneInfoViewSet(viewsets.ModelViewSet):
          queryset = TestScene.objects.all()
          serializer_class = TestSceneSerializer

    D、路由配置
    主url
    urlpatterns = [
      path(r"", include("zatester.urls")),
      path('admin/', admin.site.urls),
      path("api/docs/", include_docs_urls()),
    ]
    app url


    router = routers.SimpleRouter()
    router.register(r"scenes", scene.SceneInfoViewSet, basename="devices")

    urlpatterns = [
    path(r"api/", include(router.urls)),
    ]

    启动服务,采用get、post、put、update、partial_update 等访问以下接口,可以对model类进行操作

    http://127.0.0.1:9000/api/scenes/ 

    具体接口定义访问http://localhost:9000/api/docs

    D、VIEWSET自定义action

    额外的action

     viewset通过以上来实现列表,详情,增加,修改,部分修改,删除种不同功能的接口。可是在实际情况中,我们需要的不仅仅是这些,所以,我们需要额外的url来路由。于是引入了action装饰器,我们可以在viewset中添加额外的路由了,使用方法:

    from myapp.permissions import IsAdminOrIsSelf
    from rest_framework.decorators import action
    
    class UserViewSet(ModelViewSet):
        ...
    
        @action(methods=['post'], detail=True, permission_classes=[IsAdminOrIsSelf])
        def set_password(self, request, pk=None):
    
    Note
    在之前旧的版本使用的是detail_route,list_route连个装饰器来添加额外的路由,用来区别url中是否有pk字段。action装饰器则是通过detail字段来区别
    

    使用上面action生成的url是 ^users/{pk}/set_password/$。 如果不想使用方法的名字来做路由,可以在action中指定url_name

  • 相关阅读:
    PHP实现大文件下载
    使用CSS样式的三种方式
    PHP工厂模式
    使用 curl 命令发送请求
    vim 基本操作
    MAC OS 各个文件夹详细介绍以及 node 安装位置
    linux find 命令
    Mac 关闭某端口程序
    glob 模式的 Linux Shell 通配符介绍
    Mac tree 输出文件树形式
  • 原文地址:https://www.cnblogs.com/yoyo008/p/14043009.html
Copyright © 2011-2022 走看看