11 view
- View
- APIView
- GenericAPIView
- GenericAPIViewSet
- ModelViewSet
GenericAPIView 源码摘要
# 无用# GenericAPIView 源码摘要class GenericAPIView():def get_queryset(self):...def get_object(self):.…def get_serializer(self,*args,**kwargs):...def get_serializer_class(self):..def get_serializer_context(self)...def filter_queryset(self, queryset)...@ propertydef paginator(self)..def paginate_queryset(self, queryset):……def get_paginated_response(self, data)...from api.utils.serializsers.pager import PagerSerialiserfrom rest_framework.generics import GenericAPIViewclass ViewlView(GenericAPIView):queryset=models.Role.objects.al1()serializer_class=PagerSerialiserpagination_class=PageNumberPaginationdef get(self,request,*args,**kwargs):# 获取数据roles=self.get_queryset() #models.Role.objects.all()# 分页 [1,1880,][1,10]pager_roles=self.paginate_queryset(roles)# 序列化ser=self.get_serializer(instance=pager_roles,many=True)return Response(ser.data)
GenericAPIViewSet 示例
GenericAPIViewSet(ViewSetMixin, generics.GenericAPIView):# urls.py# url(r^'(P?<version>[v1|v2]+/v1/$)', views.View1View.as_view({'get': 'list'})from api.utils.serializsers.pager import PagerSerialiserfrom rest_framework.viewsets import GenericAPIViewSetclass ViewlView(GenericAPIViewSet):queryset=models.Role.objects.al1()serializer_class=PagerSerialiserpagination_class=PageNumberPaginationdef list(self,request,*args,**kwargs):# 获取数据roles=self.get_queryset() #models.Role.objects.all()# 分页 [1,1880,][1,10]pager_roles=self.paginate_queryset(roles)ser=self.get_serializer(instance=pager_roles,many=True)return Response(ser.data)
ModelViewSet 源码
class ModelViewset(mixins.createModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModelMixin,mixins.DestroyModelMixin,mixins.ListModelMixin,GenericViewSet):"""A viewset that provides default create(), retrieve(), update(), partial_update(), destroy(), andlist() actions."""pass
示例代码
from api.utils.serializsers.pager import PagerSerialiserfrom rest_framework.viewsets import ModelViewSetfrom rest_framework.mixins import ListModelMixin, CreateModelMixinclass ViewlView(ModelViewSet):queryset=models.Role.objects.al1()serializer_class=PagerSerialiserpagination_class=PageNumberPagination# urls.pyurl(r"^(?P[vl|v2]+)/v1/$",views.ViewlView.as_view({"get":"list","post":"create"})),ur1(x"^(?P[vl|v2]+)/v1/(?P\d+)/$",views.ViewlView.as_view( {"get":"retrieve","delete":"destroy","put":"update","patch":"partial_update"})),
总结:
- 简单的增删改查;可以使用
ModelViewSet - 增删;可以使用
CreateModelMixin,DestroyModelMixin,GenericAPIViewSet - 复杂逻辑
APIView/GenericAPIView
content-type 组件
功能
帮助开发者做连表操作
