1. 程式人生 > 實用技巧 >檢視基類、擴充套件類、子類及試圖集等相關內容-85

檢視基類、擴充套件類、子類及試圖集等相關內容-85

1 2個檢視基類

# Django REST framwork 提供的檢視的主要作用:
控制序列化器的執行(檢驗、儲存、轉換資料)
控制資料庫查詢的執行
# APIView:繼承了原生Django的View
# GenericAPIView:繼承了APIView
-queryset = models.Book.objects.all()
-serializer_class = serializer.BookModelSerializer
-get_queryset:獲取配置的queryset
-get_object:路由中的分組欄位必須是pk
-get_serializer:獲取配置的序列化類




# 最終總結
#兩個基類
APIView:如果跟models沒有關係(沒有資料庫相關操作),就繼承它
GenericAPIView:有關資料庫操作,queryset 和serializer_class






2 5個檢視擴充套件類

#5個檢視擴充套件類(rest_framework.mixins)
CreateModelMixin:create方法建立一條
DestroyModelMixin:destory方法刪除一條
ListModelMixin:list方法獲取所有
RetrieveModelMixin:retrieve獲取一條
UpdateModelMixin:update修改一條

3 9個子類檢視

#9個子類檢視(rest_framework.generics)
CreateAPIView:繼承CreateModelMixin,GenericAPIView,有post方法,新增資料
DestroyAPIView:繼承DestroyModelMixin,GenericAPIView,有delete方法,刪除資料
ListAPIView:繼承ListModelMixin,GenericAPIView,有get方法獲取所有
UpdateAPIView:繼承UpdateModelMixin,GenericAPIView,有put和patch方法,修改資料
RetrieveAPIView:繼承RetrieveModelMixin,GenericAPIView,有get方法,獲取一條


ListCreateAPIView:繼承ListModelMixin,CreateModelMixin,GenericAPIView,有get獲取所有,post方法新增
RetrieveDestroyAPIView:繼承RetrieveModelMixin,DestroyModelMixin,GenericAPIView,有get方法獲取一條,delete方法刪除
RetrieveUpdateAPIView:繼承RetrieveModelMixin,UpdateModelMixin,GenericAPIView,有get獲取一條,put,patch修改
RetrieveUpdateDestroyAPIView:繼承RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin,GenericAPIView,有get獲取一條,put,patch修改,delete刪除

4 檢視集

#檢視集

# ViewSetMixin:重寫了as_view

# ViewSet: 繼承ViewSetMixin和APIView
# GenericViewSet:繼承ViewSetMixin, generics.GenericAPIView

# ModelViewSet:繼承mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,mixins.ListModelMixin,GenericViewSet
# ReadOnlyModelViewSet:繼承mixins.RetrieveModelMixin,mixins.ListModelMixin,GenericViewSet

5 action的使用

# 只要繼承了ViewSetMixin類
# 路由配置:path('books_mix/', views.BookView.as_view({'get':'lqz'}))
# 檢視類的方法中就會有個action
class BookView(ViewSet):
def lqz(self,request,*args,**kwargs):
print(self.action)
return Response('lqz')


# ViewSetMixin以後只要繼承它,路由的配置就發生變化了,只需要寫對映即可

6 路由的使用

# 自動生成路由
# SimpleRouter
# DefaultRouter

# 繼承了ViewSetMixin的檢視類,以後寫路由,可以自動生成
from rest_framework import routers
# 例項化得到一個物件
router = routers.SimpleRouter()
# 註冊進路由
router.register('books', views.BookSetView)
# 把自動生成的路由配置到urlpatterns中
-urlpatterns += router.urls
-re_path(r'v1/', include(router.urls))




# 配置路由的方式
-最原始的
-path('books/', views.BookAPIView.as_view()),
-ViewSetMixin的檢視類
-path('books_set/', views.BookSetView.as_view({'get':'list','post':'create'}))
-ViewSetMixin的檢視類
-自動生成,上面講的




# action
-當自動生成路由的時候,由於檢視類中還有其它方法,是無法自動生成路由的
-加action裝飾器:
-methods:什麼請求方式會觸發被裝飾函式的執行
-detail:是True是基於帶id的路由生成的,如果是False,是基於不帶id的路由生成的
-@action(methods=['get'], detail=True)