#view.py
def post(self,request,format=None):
serializer = GoodsSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data,status=status.HTTP_201_CREATED)
此时的request为drf里面封装的request
APIView的封装
class GoodsListView(APIView):
def get(self,request,format=None):
goods = Goods.object.all()
goods_serializer = GoodsSerializer(goods,many=True)
return Response(goods.serializer.data)#无论是post还是get都存放在data里面
GenericAPIView
GenericView的封装
class GoodsListView(mixins.ListModelMixin,generic.GenericAPIView):
queryset = Goods.objects.all()[:10]
serializer_class = GoodsSerializer
#如果这种继承view的方式不给get或者post方法就默认认为不接收请求
def get(self,request,*arg,**kwargs):
return self.list(request,*arg,**kwargs)
在GenericAPIView里面还封装了一些不直接元素
from rest_framework.routers import DefaultRouter
from goods.views_base import GoodsListView
class GoodsListView(ListAPIView):
queryset = Goods.objects.all()[:10]
serializer_class = GoodsSerializer
Viewsets和Router
在Viewsets中封装了as_view方法,可以直接使用as_view
router = DefaultRouter()
#配置goods的url
router.register(r'goods', GoodsListViewSet, base_name="goods")
序列化:
serializer.py介绍Modelserializer
from rest_framework import serializers
#返回对象,这个封装了response
from rest_framework.response import Response
class CategorySerializer(serializers.ModelSerializer):
class Meta:
model = GoodsCategory
fields = "__all__"
class GoodsSerializer(serializers.ModelSerializer):
class Meta:
category = CategorySerializer()#外链函数
model = Goods
#fields = ('name')#可以指定字段
fields = "__all__"#也可以全部选择