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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM