22、Django_rest framework_View最终优

2020-03-08  本文已影响0人  猪儿打滚

一 、ViewSet

1、当前两个类视图的请求方法、对应的方法(动作)和描述

我们是否可以把路由和动作给进行映射?如果获取单条详情数据,则执行retrieve,如果获取多条详情数据,则执行list...

请求方法 动作 描述
GET retrieve 获取详情数据/单条
GET list 获取详情数据/多条
POST create 创建数据
PUT update 更新数据
PATCH partial_update 部分更新
DELETE destory 删除数据
2、ViewSet

二、最终方案

2.1、继承GenericViewSet
2.2、mixins
2.3、viewsets.ModelViewSet

综上所述,我们最终需要的是一个继承了GenericViewSetmixins这些类的类,然后我们的视图类,再去继承它。
这个类就是viewsets.ModelViewSet

三、最终代码

from rest_framework import viewsets 
from django_filters.rest_framework import DjangoFilterBackend

from projects.models import Projects 
from projects.serializer import ProjectModelSerializer 

class ProjectsViewSet(viewsets.ModelViewSet):
    ordering_fields = ['name', 'leader']
    queryset = Projects.objects.all()
    serializer_class = ProjectModelSerializer
    filter_backends = [DjangoFilterBackend]
    filterset_fields =['name', 'desc']
from django.urls import path
from projects import views

urlpatterns = [
    # 没有id的url
    path('project/', views.ProjectsViewSet.as_view({
        # 请求方式和action的映射
        'get': 'list',
        'post': 'create'
    }), name='projects_list'),
    # 带id的url
    path('project/<int:pk>/', views.ProjectsViewSet.as_view({        
         # 请求方式和action的映射
        'get':'retrieve',
        'put': 'update',
        'delete':'destroy'
    }), name='project_detail'
)]

三、View的总结

上一篇下一篇

猜你喜欢

热点阅读