Restframework的View视图

本文介绍了Restframework中View视图的封装层次,从最底层的View到常用的APIView,再到通过mixins和generics进一步简化代码的ListAPIView,揭示了封装与灵活性之间的平衡。
摘要由CSDN通过智能技术生成

Restframework对view进行了多层封装,封装层数越多,越不灵活
点击查看官方文档

  • View (最底层的view)

#底层view
from django.views.generic.base import View

from goods.models import Goods

class GodsListView(View):
   def get(self,request):
       """
       t通过django的view实现商品列表页
       :param request:
       :return:
       """
       json_list = []
       goods = Goods.objects.all()[:10]
       # for good in goods:
       #     json_dict = {}
       #     json_dict["name"] = good.name
       #     json_dict["category"] = good.category.name
       #     json_dict["market_price"] = good.market_price
       #     json_list.append(json_dict)


       # from django.forms.models import model_to_dict
       # for good in goods:
       #     json_dict = model_to_dict(good)
       #     json_list.append(json_dict)
       #
       from django.http import HttpResponse,JsonResponse
       import json
       from django.core import serializers
       json_data = serializers.serialize("json",goods)
       json_data = json.loads(json_data)
       return JsonResponse(json_data,safe=False)

  • APIView (继承底层view,进行封装,一般用的较多)
from rest_framework.views import APIView
from rest_framework.response import Response

class GoodsListView(APIView):
   """
   商品列表
   """
   def get(self,request,format=None):
       goods = Goods.objects.all()[:10]
       goods_serializer = GoodsSerializer(goods,many=True)
       return Response(goods_serializer.data)

   def post(self,request,format=None):
       serilizer = GoodsSerializer(data=request.data)
       if serilizer.is_valid():
           serilizer.save()
           return Response(serilizer.data,status=status.HTTP_201_CREATED)
       return Response(serilizer.errors,status=status.HTTP_400_BAD_REQUEST)
  • mixins、generics封装简化代码
from rest_framework import mixins
from rest_framework import generics

class GoodsListView(mixins.ListModelMixin,generics.GenericAPIView):
    """
    商品列表页
    """
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer

    def get(self,request,*args,**kwargs):
        return self.list(request,*args,**kwargs)
  • ListAPIView 将上面的方法再次封装,使代码更加简洁
     class ListAPIView(mixins.ListModelMixin,GenericAPIView)
from rest_framework import generics

class GoodsListView(generics.ListAPIView):
    """
    商品列表页
    """
    queryset = Goods.objects.all()
    serializer_class = GoodsSerializer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值