1.ViewSet之间的关系
View
Apiview
GenericApivew
GenericViewSet(viewset)
从最底层向上依次继承,比如Apiview继承了View
2.使用viewset
class GoodsListViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
"""
显示商品列表
"""
queryset = Goods.objects.all()
serializer_class = GoodsSerializer
pagination_class = GoodsPagination
GenericViewSet类不提供任何操作,但是包含了基本的通用视图行为集,例如get_object 和 get_queryset方法。也就是如果只使用viewsets.GenericViewSet是没有定义get、post方法的。如果仅使用此方法还需要与在url中进行绑定操作,把get请求绑定到list之上。
3.Router的使用
由2我们知道需要进行绑定操作。使用Router可以简化此操作,可以使用Router类自动处理将资源连接到视图和URL的约定。
from rest_framework.routers import DefaultRouter
from goods.views import GoodsListView, GoodsListViewSet
#使用的DefaultRouter类也会自动创建API根视图
router = DefaultRouter()
#配置goods的url
router.register(r'goods', GoodsListViewSet,basename="goods")
然后把 url(r’^api-auth/’, include(‘rest_framework.urls’, namespace=‘rest_framework’)),加入到url中用于drf认证url
4.mixin
CreateModelMixin:创建一个模型实例。POST
ListModelMixin:列出查询集。GET
RetrieveModelMixin:检索模型实例。GET
UpdateModelMixin:更新一个模型实例。UPDATE
DestroyModelMixin:销毁一个模型实例。DELETE
增删改查操作的模型实例的感觉。。。