日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

rest_framework05:GenericAPIView用法/扩展类5个/子类9个/ViewSetMixin 自定义方法名字

發(fā)布時(shí)間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 rest_framework05:GenericAPIView用法/扩展类5个/子类9个/ViewSetMixin 自定义方法名字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GenericAPIView

1.視圖層類使用GenericAPIView繼承,能簡(jiǎn)化類里的方法code。

2.簡(jiǎn)化后的方法code格式基本通用,簡(jiǎn)單修改即可應(yīng)用到其他類。

一、class開始加入

queryset = Book.objectsserializer_class = BookModelSerializer

二、方法里獲取對(duì)象

a.查詢一個(gè)使用,如需要pk值查詢

book = self.get_object()

b.查詢多個(gè),如獲取所有對(duì)象

book = self.get_queryset()

c.序列化方法使用self.get_serializer()

括號(hào)內(nèi)原來是什么參數(shù),就寫什么參數(shù),如

instance=book, data=request.data,

many=True

三、代碼views.py

from app01.models import Book from app01.ser import BookSerializer,BookModelSerializer from rest_framework.response import Response from rest_framework.generics import GenericAPIView # 自己學(xué)的response from app01.utils import MyResponse# 基于GenericAPIView class BookView(GenericAPIView):queryset = Book.objectsserializer_class = BookModelSerializerdef get(self, request, pk):book = self.get_object()book_ser = self.get_serializer(book)return Response(book_ser.data)def put(self, request, pk):response = MyResponse()book = self.get_object()book_ser = self.get_serializer(instance=book, data=request.data)# 要數(shù)據(jù)驗(yàn)證if book_ser.is_valid(): # 返回True 表示驗(yàn)證通過book_ser.save()response.data = book_ser.dataelse:response.status= 101response.msg = '數(shù)據(jù)校驗(yàn)失敗'response.data= book_ser.errorsreturn Response(response.get_dic)def delete(self, request, pk):ret = Book.objects.filter(pk=pk).delete()return Response({'status': 100, 'msg': '刪除成功'})class BooksView(GenericAPIView):queryset = Book.objectsserializer_class = BookModelSerializer# 使用封裝responsedef get(self, request):response=MyResponse()book = self.get_queryset()book_ser = self.get_serializer(book, many=True) # 序列化多條。 如果一條,不需要寫response.data = book_ser.datareturn Response(response.get_dic)# 新增def post(self, request):response=MyResponse()# 新增沒有instance,只有databook_ser = self.get_serializer(data=request.data)# 如果沒有data=,會(huì)報(bào)錯(cuò)。第一個(gè)參數(shù)是instance# book_ser = BookSerializer(request.data)# 校驗(yàn)字段if book_ser.is_valid():book_ser.save()response.data = book_ser.dataelse:response.status = 102response.msg = '新增數(shù)據(jù)校驗(yàn)失敗'response.data = book_ser.datareturn Response(response.get_dic)

5個(gè)視圖擴(kuò)展類

分別如下,

ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin from app01.models import Book from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin,RetrieveModelMixin# 5個(gè)擴(kuò)展類 class Books3View(GenericAPIView,ListModelMixin,CreateModelMixin):queryset = Book.objectsserializer_class = BookModelSerializerdef get(self,request):return self.list(request)def post(self,request):return self.create(request)class Book3DetailView(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):queryset = Book.objectsserializer_class = BookModelSerializerdef get(self,request,pk):return self.retrieve(request,pk)def put(self,request,pk):return self.update(request,pk)def delete(self,request,pk):return self.destroy(request,pk)

GenericAPIView的視圖子類 9個(gè)

create,update等對(duì)應(yīng)方法可以單獨(dú)繼承,也有組合的類繼承,所以有9個(gè)。

# 基于 GenericAPIView的視圖子類9個(gè) from rest_framework.generics import CreateAPIView,ListAPIView,UpdateAPIView,RetrieveAPIView,DestroyAPIView,ListCreateAPIView,RetrieveUpdateAPIView,RetrieveDestroyAPIView,RetrieveUpdateDestroyAPIView# class Books4View(ListAPIView,CreateAPIView): class Books4View(ListCreateAPIView):queryset = Book.objectsserializer_class = BookModelSerializer# class Book4DetailView(UpdateAPIView,RetrieveAPIView,DestroyAPIView): class Book4DetailView(RetrieveUpdateDestroyAPIView):queryset = Book.objectsserializer_class = BookModelSerializer

ModelViewSet

簡(jiǎn)寫成一個(gè)class,路由需要特別寫法。

urls.py

path('books5/', views.Books5View.as_view(actions={'get':'list','post':'create'})),re_path('^books5/(?P<pk>\d+)', views.Books5View.as_view(actions={'get':'retrieve','put':'update','delete':'destroy'})),

views.py

# 使用ModelViewSet編寫5個(gè)接口 from rest_framework.viewsets import ModelViewSet class Books5View(ModelViewSet):queryset = Book.objectsserializer_class = BookModelSerializer

使用ViewSetMixin 自定義方法名字

path('books6/', views.Books6View.as_view(actions={'get': 'get_all_book'})),

# 使用ViewSetMixin 自定義方法名字 from rest_framework.viewsets import ViewSetMixin# ViewSetMixin一定放在前面,重寫as_view方法 class Books6View(ViewSetMixin,GenericAPIView):def get_all_book(self,request):books = Book.objects.all()book_ser = BookSerializer(books, many=True)return Response(book_ser.data)

總結(jié)

以上是生活随笔為你收集整理的rest_framework05:GenericAPIView用法/扩展类5个/子类9个/ViewSetMixin 自定义方法名字的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。