标签:method let rgs 子类 完成 ^c 通用 组合 router
-APIView,
-GenericAPIView
-CreateModelMixin,
-ListModelMixin,
-RetrieveModelMixin,
-UpdateModelMixin,其中包含两个工具:update,partial_update
-DestroyModelMixin,
九个
-两个视图集基类
-两个视图集子类
-一个工具类
from rest_framework.views import APIView
继承自View父类,支持View的所有方法
from rest_framework.generics import GenericAPIView
继承自APIView
get_serializer方法,配置serializer_class类属性,提供视图类相关的序列化对象
总结:
GenericAPIView就是在APIView基础上提供了三个方法,三个类属性,需要配合视图工具类来体现优势.
完成单增
def create(self, request, *args, **kwargs):
完成群查
def list(self, request, *args, **kwargs):
完成单查
def retrieve(self, request, *args, **kwargs):
完成整体单改
def update(self, request, *args, **kwargs):
完成局部单改
def perform_update(self, serializer):
完成单删:
def destroy(self, request, *args, **kwargs):
注意:这里的删除是删除表记录,生产中,常设置一字段来标识此记录是否删除,所以实际生产中自己重写destroy方法.
因为这六个方法的实现体,调用的方法都是GenericAPIView类提供的,所以需要配合GenericAPIView类使用
九种组合
通过不同种类的mixins与GenericAPIView组合来完成需要的功能
不同的组合实现对应的get,post,put,patch,delete方法
需要自己配置三个类属性
queryset、serializer_class、lookup_url_kwarg
视图集都继承了ViewSetMixin类,该类重写了as_view方法,与APIView对比,ViewSetMixin多出了一个actions参数,内部通过
for method, action in actions.items():
handler = getattr(self, action)
setattr(self, method, handler)
getattr,与setattr方法将url中字典中的key与后台函数(大概率是视图工具中的函数)的函数名进行一一映射,
两个视图集基类ViewSet和GenericViewSet
三个视图类
只是继承了一堆方法,流氓类
ModelViewSet方法
class ModelViewSet(mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.DestroyModelMixin,
mixins.ListModelMixin,
GenericViewSet):
pass
ReadOnlyModelViewSet方法
class ReadOnlyModelViewSet(mixins.RetrieveModelMixin,
mixins.ListModelMixin,
GenericViewSet):
pass
ViewSet方法
class ViewSet(ViewSetMixin, views.APIView):
pass
导入模块
from
rest_framework.routers ``import
SimpleRouter
初始化路由对象
router ``=
SimpleRouter()
创建路由
# 注册各种接口路由
router.register('cars', views.CarModelViewSet, base_name='car')
#car为链接的开头,views.CarModelViewSet为当路由为cars的时候的调用的函数
urlpatterns =[]
urlpatterns.extend(router.urls)
其想过等价于
urlpatterns = [
url(r'^cars/$', views.CarModelViewSet.as_view()),
url(r'^cars/(?P<pk>.*)/$', views.CarModelViewSet.as_view()),
]
标签:method let rgs 子类 完成 ^c 通用 组合 router
原文地址:https://www.cnblogs.com/agsol/p/12121914.html