11 view

  • View
  • APIView
  • GenericAPIView
  • GenericAPIViewSet
  • ModelViewSet

GenericAPIView 源码摘要

  1. # 无用
  2. # GenericAPIView 源码摘要
  3. class GenericAPIView():
  4. def get_queryset(self):...
  5. def get_object(self):.…
  6. def get_serializer(self,*args,**kwargs):...
  7. def get_serializer_class(self):..
  8. def get_serializer_context(self)...
  9. def filter_queryset(self, queryset)...
  10. @ property
  11. def paginator(self)..
  12. def paginate_queryset(self, queryset):……
  13. def get_paginated_response(self, data)...
  14. from api.utils.serializsers.pager import PagerSerialiser
  15. from rest_framework.generics import GenericAPIView
  16. class ViewlView(GenericAPIView):
  17. queryset=models.Role.objects.al1()
  18. serializer_class=PagerSerialiser
  19. pagination_class=PageNumberPagination
  20. def get(self,request,*args,**kwargs):
  21. # 获取数据
  22. roles=self.get_queryset() #models.Role.objects.all()
  23. # 分页 [1,1880,][1,10]
  24. pager_roles=self.paginate_queryset(roles)
  25. # 序列化
  26. ser=self.get_serializer(instance=pager_roles,many=True)
  27. return Response(ser.data)

GenericAPIViewSet 示例

  1. GenericAPIViewSet(ViewSetMixin, generics.GenericAPIView):
  2. # urls.py
  3. # url(r^'(P?<version>[v1|v2]+/v1/$)', views.View1View.as_view({'get': 'list'})
  4. from api.utils.serializsers.pager import PagerSerialiser
  5. from rest_framework.viewsets import GenericAPIViewSet
  6. class ViewlView(GenericAPIViewSet):
  7. queryset=models.Role.objects.al1()
  8. serializer_class=PagerSerialiser
  9. pagination_class=PageNumberPagination
  10. def list(self,request,*args,**kwargs):
  11. # 获取数据
  12. roles=self.get_queryset() #models.Role.objects.all()
  13. # 分页 [1,1880,][1,10]
  14. pager_roles=self.paginate_queryset(roles)
  15. ser=self.get_serializer(instance=pager_roles,many=True)
  16. return Response(ser.data)

ModelViewSet 源码

  1. class ModelViewset(mixins.createModelMixin,
  2. mixins.RetrieveModelMixin,
  3. mixins.UpdateModelMixin,
  4. mixins.DestroyModelMixin,
  5. mixins.ListModelMixin,
  6. GenericViewSet):
  7. """
  8. A viewset that provides default create(), retrieve(), update(), partial_update(), destroy(), andlist() actions.
  9. """
  10. pass

示例代码

  1. from api.utils.serializsers.pager import PagerSerialiser
  2. from rest_framework.viewsets import ModelViewSet
  3. from rest_framework.mixins import ListModelMixin, CreateModelMixin
  4. class ViewlView(ModelViewSet):
  5. queryset=models.Role.objects.al1()
  6. serializer_class=PagerSerialiser
  7. pagination_class=PageNumberPagination
  8. # urls.py
  9. url(r"^(?P[vl|v2]+)/v1/$",views.ViewlView.as_view(
  10. {"get""list","post""create"})),
  11. ur1(x"^(?P[vl|v2]+)/v1/(?P\d+)/$",views.ViewlView.as_view( {"get""retrieve","delete""destroy","put""update","patch""partial_update"})),

总结:

  1. 简单的增删改查;可以使用ModelViewSet
  2. 增删;可以使用CreateModelMixin,DestroyModelMixin,GenericAPIViewSet
  3. 复杂逻辑 APIView/GenericAPIView

content-type 组件

功能

帮助开发者做连表操作