コード例 #1
0
    def get(self, request, *args, **kwargs):
        """想要同时查询图书对应出版社的信息"""
        book_id = kwargs.get("id")

        if book_id:
            try:
                book_obj = Book.objects.get(pk=book_id)
                book_ser = serializers.BookModelSerializer(book_obj).data
                return Response({
                    "status": 200,
                    "message": "查询图书成功",
                    "results": book_ser
                })
            except:
                return Response({
                    "status": 200,
                    "message": "查询图书不存在",
                })
        else:
            book_list = Book.objects.all()
            book_data = serializers.BookModelSerializer(book_list,
                                                        many=True).data

            return Response({
                "status": 200,
                "message": "查询图书列表成功",
                "results": book_data
            })
コード例 #2
0
ファイル: views.py プロジェクト: FanMagnum/django_drf_learn
    def patch(self, request, *args, **kwargs):
        request_data = request.data  # 数据包数据
        pk = kwargs.get('pk')
        # 将单改,群改的数据都格式化成 pks=[要需要的对象主键标识] | request_data=[每个要修改的对象对应的修改数据]
        if pk and isinstance(request_data, dict):  # 单改
            pks = [
                pk,
            ]
            request_data = [
                request_data,
            ]
        elif not pk and isinstance(request_data, list):  # 群改
            pks = []
            # 遍历前台数据[{pk:1, name:123}, {pk:3, price:7}, {pk:7, publish:2}],拿一个个字典
            for dic in request_data:
                pk = dic.pop('pk', None)  # 返回pk值
                if pk:
                    pks.append(pk)
                # pk没有传值
                else:
                    return Response({'status': 1, 'msg': '参数错误'})
        else:
            return Response({'status': 1, 'msg': '参数错误'})
        # pks与request_data数据筛选,
        # 1)将pks中的没有对应数据的pk与数据已删除的pk移除,request_data对应索引位上的数据也移除
        # 2)将合理的pks转换为 objs
        objs = []
        new_request_data = []
        for index, pk in enumerate(pks):
            try:
                # 将pk合理的对象数据保存下来
                book_obj = models.Book.objects.get(pk=pk, is_delete=False)
                objs.append(book_obj)
                # 对应索引的数据也保存下来
                new_request_data.append(request_data[index])
            except:
                # 重点:反面教程 - pk对应的数据有误,将对应索引的data中request_data中移除
                # 在for循环中不要使用删除
                # index = pks.index(pk)
                # request_data.pop(index)
                continue
        # 生成一个serializer对象
        book_ser = serializers.BookModelSerializer(instance=objs,
                                                   data=new_request_data,
                                                   partial=True,
                                                   many=True)
        book_ser.is_valid(raise_exception=True)
        book_objs = book_ser.save()

        return Response({
            'status':
            0,
            'msg':
            'ok',
            'results':
            serializers.BookModelSerializer(book_objs, many=True).data
        })
コード例 #3
0
ファイル: views.py プロジェクト: FanMagnum/django_drf_learn
    def get(self, request, *args, **kwargs):
        pk = kwargs.get('pk')
        # 单查
        if pk:
            try:
                book_obj = models.Book.objects.get(pk=pk, is_delete=False)
                book_data = serializers.BookModelSerializer(
                    book_obj).data  # 序列化
            except:
                return Response({'status': 1, 'msg': '参数有误'})
        # 群查
        else:
            book_query = models.Book.objects.filter(is_delete=False).all()
            book_data = serializers.BookModelSerializer(book_query,
                                                        many=True).data  # 序列化

        return Response({'status': 0, 'msg': 'ok', 'results': book_data})
コード例 #4
0
ファイル: views.py プロジェクト: FanMagnum/django_drf_learn
    def put(self, request, *args, **kwargs):
        request_data = request.data
        pk = kwargs.get('pk')
        # 先获取要修改的对象
        try:
            old_book_obj = models.Book.objects.get(pk=pk, is_delete=False)
        except:
            # 当输入不存在的pk
            return Response({'status': 1, 'msg': '参数错误'})
        book_ser = serializers.BookModelSerializer(instance=old_book_obj,
                                                   data=request_data,
                                                   partial=False)
        book_ser.is_valid(raise_exception=True)
        book_obj = book_ser.save()

        return Response({
            'status':
            0,
            'msg':
            'ok',
            'results':
            serializers.BookModelSerializer(book_obj).data
        })
コード例 #5
0
ファイル: views.py プロジェクト: FanMagnum/django_drf_learn
    def post(self, request, *args, **kwargs):
        # 单增:传的数据是与model对应的一个字典
        # 群增:设计传递的是多个model对应的字典列表,在postman中通过列表嵌套字典传值
        request_data = request.data
        if isinstance(request_data, dict):  # 判断获取的数据是否是dict
            many = False
        elif isinstance(request_data, list):  # 判断获取的数据是否是list
            many = True
        else:
            return Response({'status': 1, 'msg': '数据错误'})
        book_ser = serializers.BookModelSerializer(data=request_data,
                                                   many=many)  # 反序列化
        book_ser.is_valid(raise_exception=True)
        book_result = book_ser.save(
        )  # book_result是对象<class 'app01.models.Book'>,群增就是列表套一个个对象

        return Response({
            'status':
            0,
            'msg':
            'ok',
            'results':
            serializers.BookModelSerializer(book_result, many=many).data
        })
コード例 #6
0
    def post(self, request, *args, **kwargs):
        """只考虑增加单个"""
        request_data = request.data
        # 反序列化的时候需要将参数赋值关键字 data
        book_ser = serializers.BookModelDeSerializer(data=request_data)
        # 校验数据是否合法
        # raise_exception=True: 当校验失败的时候,马上终止当前视图方法,抛出异常到前台
        book_ser.is_valid(raise_exception=True)
        book_obj = book_ser.save()

        return Response({
            "status":
            200,
            "message":
            "success",
            "results":
            serializers.BookModelSerializer(book_obj).data
        })