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