django rest framework viewapi

django自带form、modelform,drf有serializer、ModelSerializer与之对应。

drf(django rest framework),提供了强大的Web browsable API,auth第三方登录认证,Serialization,CBV

drf自定义序列化类, django中有modelform,自动化form将字段转化成html,serializer针对json,将这些数据直接序列化成json。

drf根据我们请求格式,为了便与浏览,将数据进行格式化。

from rest_framework.response import Response

Response对象 很强大比django中的Response对象要强大

drf根据我们请求的类型,为了便于浏览,直接返回json格式、并返回接口的描述。

ModelSerializer中通过model读取field字段,然后ModelSerializer自己进行映射,可以将代码更加精简,直接完成序列化。

class GoodsSerializer(serializers.ModelSerializer):
    class Meta:
        model = Goods
        fields = ('name', 'click_num', 'market_price', 'add_time')

drf 自带pagination包,从中可以调取想要的信息,对页面进行分页。

drf中的viewset中有一个GenericViewSet重写了as_view()功能,可以通过函数完成绑定,将get功能绑定道list,

在url.py中配置

goods_list = GoodsListViewSet.as_view({
    'get':'list',
    'post':'create'
})
url(r'^goods/$', goods_list ,name="goods_list"),

在url中将get函数绑定在list 上,替代了定义get绑定list。

def get(self, request, *args, **kwargs):
    return self.list(request, *args, **kwargs)

而drf的routers功能更加强大,用register配置,可以将url中的设置goods参数时候,默认将GoodsListViewSet绑定,并且将get和list,post和create函数自动绑定,router操作很简单而且功能很完善,后期都是通过router绑定的。

from goods.views import GoodsListViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
#配置goods的router
router.register('goods', GoodsListViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
]

总结:viewset、GenericViewSet之间的关系,由上到下一层层是继承关系,而前三层是drf自带的,view是django自带的。

from django.views import View
from rest_framework.views import APIView
from rest_framework.viewsets import GenericViewSet, ViewSet
from rest_framework.generics import GenericAPIView

GenericViewSet(ViewSet) drf  最高一层
    继承GenericAPIView  drf   第二层
        继承APIView     drf   第三层
            继承 View    django

genericAPIView配合跟中mixin来使用,viewset继承了APIView,加了ViewSetMixin,在url配置中进行绑定。

允许将patch/put绑定,加了ViewSetMixin,可以在url配置中绑定用router绑定 自己就可以绑定,将绑定的内容移到url中,有action动态绑定

主要差异在mixin,下面对mixin小结:

CreateModelMixin
ListModelMixin
RetrieveModelMixin
UpdateModelMixin
DestroyModelMixin

上面几个主要通过mixin区别

from rest_framework import viewsets
from rest_framework.generics import GenericAPIView,views,ListAPIView,ListCreateAPIView


ListAPIView
    继承 viewsets  有class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
                允许将patch/put绑定,加了ViewSetMixin,可以在url配置中绑定用router绑定

                自己就可以绑定,将绑定的内容移到url中,有action动态绑定

    继承 GenericAPIView

 

转载于:https://my.oschina.net/u/3955849/blog/2985884

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值