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)...
@ property
def paginator(self)..
def paginate_queryset(self, queryset):……
def get_paginated_response(self, data)...
from api.utils.serializsers.pager import PagerSerialiser
from rest_framework.generics import GenericAPIView
class ViewlView(GenericAPIView):
queryset=models.Role.objects.al1()
serializer_class=PagerSerialiser
pagination_class=PageNumberPagination
def 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 PagerSerialiser
from rest_framework.viewsets import GenericAPIViewSet
class ViewlView(GenericAPIViewSet):
queryset=models.Role.objects.al1()
serializer_class=PagerSerialiser
pagination_class=PageNumberPagination
def 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 PagerSerialiser
from rest_framework.viewsets import ModelViewSet
from rest_framework.mixins import ListModelMixin, CreateModelMixin
class ViewlView(ModelViewSet):
queryset=models.Role.objects.al1()
serializer_class=PagerSerialiser
pagination_class=PageNumberPagination
# urls.py
url(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 组件
功能
帮助开发者做连表操作