zoukankan      html  css  js  c++  java
  • drf-视图家族练习

    视图类

    from rest_framework.viewsets import ViewSetMixin, GenericViewSet, ViewSet, ModelViewSet
    from .response import APIResponse
    from rest_framework.response import Response
    
    
    class Car(ModelViewSet):
        queryset = models.Car.objects.filter(is_delete=False).all()
        serializer_class = serializers.CarModelSerializer
    
        # 群查
        def list(self, request, *args, **kwargs):
            response = super().list(request, *args, **kwargs)
            return APIResponse(status=response.data)
    
        # 单查
        def retrieve(self, request, *args, **kwargs):
            response = super().retrieve(request, *args, **kwargs)
            return APIResponse(status=response.data)
    
        # 局部单改
        def partial_update(self, request, *args, **kwargs):
            response = super().partial_update(request, *args, **kwargs)
            return APIResponse(status=response.data)
    
        # 群改
        def many_partial_update(self, request, *args, **kwargs):
            request_data = request.data
            try:
                pks = []
                for dic in request_data:
                    pk = dic.pop('id')
                    pks.append(pk)
                car_query = models.Car.objects.filter(is_delete=False, pk__in=pks).all()
                if len(pks) != len(car_query):
                    raise Exception('PK对应的数据不存在')
            except Exception as e:
                return Response({'detail': '%s' % e}, status=400)
            car_ser = self.get_serializer(instance=car_query, data=request_data, many=True,
                                                partial=True)
            car_ser.is_valid(raise_exception=True)
            car_list = car_ser.save()
            return APIResponse(results=self.get_serializer(car_list, many=True).data)
    
        # 整体单改
        def update(self, request, *args, **kwargs):
            response = super().update(request, *args, **kwargs)
            return APIResponse(status=response.data)
    
        # 单删
        def destroy(self, request, *args, **kwargs):
            car_obj = self.get_object()
            car_obj.is_delete = True
            car_obj.save()
            return APIResponse(msg='删除成功')
    
        # 群增
        def create(self, request, *args, **kwargs):
            request_data = request.data
            if isinstance(request_data, list):
                # 内部方法直接将data和many值传进去就可以传到序列化了
                car_ser = self.get_serializer(data=request_data, many=True)
                car_ser.is_valid(raise_exception=True)
                car_obj = car_ser.save()
                return APIResponse(msg='添加成功', results=self.get_serializer(car_obj, many=True).data)
    
    
    

    序列化类

    from rest_framework import serializers
    from . import models
    # 汽车表序列化
    class CarModelSerializer(serializers.ModelSerializer):
        class Meta:
            # list_serializer_class固定写法,内部方法
            list_serializer_class = CarListSerializer
            model = models.Car
            fields = ['name', 'color', 'price', 'img', 'color_car', 'store', 'sponsor', 'store_info',
                      'sponsor_list']
    
            extra_kwargs = {
                'color': {
                    'write_only': True
                },
                'sponsor': {
                    'write_only': True
                },
                'store':{
                    'write_only': True
                }
            }
    
    
  • 相关阅读:
    tornado开发学习之2.输入输出,数据库操作,内置模板,综合示例
    使用Python读取和写入mp3文件的id3v1信息
    在CentOS中部署Python和配置PyCharm开发环境
    Quartz Cron 表达式(时间格式的写法)
    使用Atomikos Transactions Essentials实现多数据源JTA分布式事务
    Grub4dos 硬盘引导 iso 文件
    NFS配置
    C++程序加载Flash动画
    在boost.foreach中操作迭代器
    WebContents类
  • 原文地址:https://www.cnblogs.com/mqhpy/p/12126556.html
Copyright © 2011-2022 走看看