【轉】詳解drf中的ModelViewSet


 

轉自:https://blog.csdn.net/weixin_36646275/article/details/83965621

詳解drf中的ModelViewSet
使用:
# view.py
from rest_framework import viewsets
class PersonalSet(viewsets.ModelViewSet):
  queryset = Personal.objects.all()
  serializer_class = PersonalSerializer
  pagination_class = LargeResultsSetPagination
  permission_classes = (IsAuthenticated,)
  authentication_classes = (JSONWebTokenAuthentication,)

# urls.py
from django.urls import include, path
from rest_framework import routers
from rest_framework.authtoken import views
from rest_framework_jwt.views import obtain_jwt_token
from okr_rest.views import TestGroupSet, QuarterSet, PersonalSet

router = routers.DefaultRouter()
router.register("test_group", TestGroupSet)
router.register("quarter", QuarterSet, base_name="quarter")
router.register("personal", PersonalSet)

urlpatterns = [
  path("", include(router.urls)),
  path("api-auth/", include("rest_framework.urls", namespace="rest_framework")),
  path("api-token-auth/", views.obtain_auth_token),
  path("jwt-auth/", obtain_jwt_token)

 

說明:
ModelViewSet中默認已經有五個混入類直接封裝好處理各種請求.對應關系已經訪問url如下: DRF默認已經封裝了五種常用的方法,但由於封裝不同需要在訪問的時候注意訪問url(detail是否為true).當然也可以根據自己需要重新各種方法

類名             HTTP方法   說明     detail     URL示例
mixins.CreateModelMixin     POST   創建數據   False     http://localhost/api/personal/
mixins.RetrieveModelMixin     GET     檢索數據   True       http://localhost/api/personal/30/
mixins.UpdateModelMixin     PUT         更新數據         True                 http://localhost/api/personal/30/
mixins.DestroyModelMixin              DELETE    刪除數據        True                 http://localhost/api/personal/30/
mixins.ListModelMixin                     GET          獲取數據         False               http://localhost/api/personal/

 

view的用法說明:

class GoodsListViewSet(viewsets.ModelViewSet):

    """
    list:
        商品列表
    read:
        商品詳情
    create:
        增加商品
    update:
        更改商品
    partial_update:
        部分更改
    delete:
        刪除商品
    """
    # 必須定義一個默認排序否則會報錯
    queryset = Goods.objects.all().order_by('id')
    # 分頁
    pagination_class = GoodsPagination
    serializer_class = GoodsSerializer
    # 過濾
    filter_backends = (DjangoFilterBackend, filters.SearchFilter, filters.OrderingFilter)
    filter_class = GoodsFilters
    # 搜索
    search_fields = ('name', 'goods_brief', 'goods_desc')
    # 排序
    ordering_fields = ('sold_num', 'shop_price')


免責聲明!

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



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