django APIView,GenericAPIView实现增删查改

APIView

views.py

class PeopleView(APIView):
    #查询所有人信息
    # def get(self,request):
    #     people = People.objects.all()
    #     ser = PeopleSerializer(people,many=True)  #序列化多个数据
    #     return Response(ser.data,status=200)
    #
    def get(self,request,id):
        data = People.objects.get(id=id)
        ser = PeopleSerializer2(instance=data)
        return Response(ser.data,status=200)
    #添加一个人物信息
    def post(self,request,id):
        print("request.data",request.data)
        ser = PeopleSerializer2(data=request.data)
        #判断反序列化是否成功,raise_exception如果出现一场,则会抛出异常
        if ser.is_valid(raise_exception=True):
            ser.save()   #使用save是必须重写create方法
            return Response({"msg":"反序列化成功"},status=201)
        return Response({"msg":"反序列化失败"},status=500)

    def delete(self,request,id):
            People.objects.filter(id=id).delete()
            return Response({"msg":"删除成功"},status=200)

    def put(self,request,id):
        try:
            peo_data = People.objects.get(id=id)
        except Exception as e:
            print(e)
            return Response({"msg":"error"},status=404)
        #instance=peo_data 要修改的数据,data=request.data,修改成什么数据
        ser = PeopleSerializer2(instance=peo_data,data=request.data)
        if ser.is_valid(raise_exception=True):
            ser.save()
            return Response({"msg":"success"},status=201)
        return Response({"msg":"error"},status=500)

serializer.py      APIView的增加和修改需要重写update和create方法

class PeopleSerializer(serializers.Serializer):
    # id = serializers.IntegerField()
    name = serializers.CharField(max_length=20)
    sex = serializers.CharField(max_length=5)
    money = serializers.IntegerField()
    ranking = serializers.IntegerField()

    def create(self, validated_data):
        print("validated_data",validated_data)
        sql = People.objects.create(**validated_data)
        return sql

    #instance准备修改的对象,validated_data准备修改成什么数据
    def update(self, instance, validated_data):
        instance.name = validated_data.get('name')
        instance.sex = validated_data.get('sex')
        instance.money = validated_data.get('money')
        instance.ranking = validated_data.get('ranking')
        instance.save()
        #返回修改后的orm对象
        return instance

GenericAPIView

查询所有人物信息

添加学生信息

class StudentGenericAPIView(GenericAPIView):
    #1.指定查询结果集
    queryset = Student.objects.all()
    #2.指定序列化器
    serializer_class = StudentSerializer

    #查询所有人物信息
    def get(self,request):
        data = GenericAPIView.get_queryset(self)
        ser = GenericAPIView.get_serializer(self,instance=data,many=True)
        return Response(ser.data,status=200)

    #增加一个人物信息,反序列化
    def post(self,request):
        #使用序列化器进行反序列化,data = request.data要反序列化数据
        ser = GenericAPIView.get_serializer(self,data = request.data)
        if ser.is_valid(raise_exception=True):
            ser.save()
            return Response({"msg":"添加成功"},status=200)
        return Response({"msg":"添加失败"},status=400)

 

 #查询单个人物信息

class StudentGenericAPIView(GenericAPIView):
    #1.指定查询结果集
    queryset = Student.objects.all()
    #2.指定序列化器
    serializer_class = StudentSerializer
    #3.指定动态参数
    lookup_url_kwarg = 'id'  # StudentGenericAPIView/<str:id>/'
    #4.指定过滤orm字段
    lookup_field = 'id'

    #查询单个人物信息
    def get(self,request,id):
        data = GenericAPIView.get_object(self)
        ser = GenericAPIView.get_serializer(self,instance=data)
        return Response(ser.data,status=200)

#修改,删除人物信息

class StudentGenericAPIView(GenericAPIView):
    #1.指定查询结果集
    queryset = Student.objects.all()
    #2.指定序列化器
    serializer_class = StudentSerializer
    #3.指定动态参数
    lookup_url_kwarg = 'id'
    #4.指定过滤orm字段
    lookup_field = 'id'

    #查询单个人物信息
    def get(self,request,id):
        data = GenericAPIView.get_object(self)
        ser = GenericAPIView.get_serializer(self,instance=data)
        return Response(ser.data,status=200)


    #查询所有人物信息
    # def get(self,request):
    #     data = GenericAPIView.get_queryset(self)
    #     ser = GenericAPIView.get_serializer(self,instance=data,many=True)
    #     return Response(ser.data,status=200)

    #增加一个人物信息,反序列化
    def post(self,request,id):
        #使用序列化器进行反序列化,data = request.data要反序列化数据
        ser = GenericAPIView.get_serializer(self,data = request.data)
        if ser.is_valid(raise_exception=True):
            ser.save()
            return Response({"msg":"添加成功"},status=200)
        return Response({"msg":"添加失败"},status=400)

    def delete(self,request,id):
        GenericAPIView.get_object(self).delete()
        return Response({"code":200,"msg":"删除成功"})

    def put(self,request,id):
        data = GenericAPIView.get_object(self)
        ser = GenericAPIView.get_serializer(self,instance=data,data=request.data)
        if ser.is_valid(raise_exception=True):  
            ser.save()  #save前必须调用is_valid方法
            return Response({"msg":"修改成功"})

配合Mixin使用 

查询全部数据,查询单条数据,删除数据,修改数据,增加数据 

from rest_framework.mixins import ListModelMixin,CreateModelMixin,UpdateModelMixin,RetrieveModelMixin,DestroyModelMixin
#查询全部数据和添加数据
class PeopleMinxGener_creat_list(GenericAPIView,ListModelMixin,CreateModelMixin):
    #1.指定查询结果集
    queryset = Student.objects.all()
    #2.指定序列化器
    serializer_class = StudentSerializer

    #查询所有人物信息
    def get(self,request):
        return self.list(request)
    #添加数据
    def post(self,request):
        name = request.data.get("name")
        return self.create(request)

class PeopleMinxGener_update_del_ret(GenericAPIView,RetrieveModelMixin,UpdateModelMixin,DestroyModelMixin):
    queryset = Student.objects.all()
    serializer_class = StudentSerializer
    #指定动态参数
    lookup_url_kwarg = 'id'
    #4.指定过滤的orm字段
    lookup_field = 'id'

    #查询单条
    def get(self,request,id):
        return self.retrieve(request)
    #修改单条数据
    def put(self,request,id):
        return self.update(request)
    #删除单条数据
    def delete(self,request,id):
        return self.destroy(request)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值