• day72 作业


    视图层

    class UserV4APIView(APIView):
        def get(self,request,*args,**kwargs):
            pk=kwargs.get('pk')
            if pk:
                user_obj=models.Car.objects.filter(is_delete=False,pk=pk).first()
                if not user_obj:
                    return Response({
                        'status':1,
                        'msg':'pk error',
                    },status=400)
    
                user_ser=serializers.CarModelSerializer(user_obj,many=False)#将从数据库查到的数据对象传进去,many默认为False,单查,返回的也是一个类实例化的对象
    
                return Response({
                    'status':0,
                    'msg':'ok',
                    'results':user_ser.data
                })
            else:
                #将对象对外提供的字段,已经整个序列化过程封装,形成序列化类
                user_query=models.Car.objects.filter(is_delete=False).all()
                user_ser=serializers.CarModelSerializer(user_query,many=True)#将从数据库查到的query对象传进去,many为True,群查,返回的也是一个类实例化的对象
                return Response({
                    'status': 0,
                    'msg': 'ok',
                    'results': user_ser.data
                })
    
        def post(self,request,*args,**kwargs):
            user_ser=serializers.CarModelSerializer(data=request.data)
            if user_ser.is_valid():
                #入库
                user_obj=user_ser.save()
                return Response({
                    'status':0,
                    'msg':'ok',
                    'results':serializers.CarModelSerializer(user_obj).data#将入库得到的user对象重新序列化的数据返回给前台
                })
            else:
                return Response({
                    'status': 1,
                    'msg': user_ser.errors,
                })
    
    

    序列化

    class CarModelSerializer(serializers.ModelSerializer):
        re_brand = serializers.CharField(min_length=3, max_length=8, write_only=True)
    
        class Meta:
            model = models.Car
            fields = ('name', 'car_car', 'img', 'price', 'brand', 're_brand')
            extra_kwargs = {
                'name': {
                    'min_length': 3,
                    'max_length': 8,
                    'error_messages': {
                        'min_length': '太短',
                        'max_length': '太长'
                    }
                },
                'car_car': {'read_only': True, 'required': False},
                'img': {'read_only': True},
            }
    
        def validated_username(self, value):
            if 'SB' in value.lower():
                raise serializers.ValidationError('名字中不能含有SB')
            return value
    
        def validate(self, attrs):
            brand = attrs.get('brand')
            re_brand = attrs.pop('re_brand')
            if re_brand != brand:
                raise serializers.ValidationError({'re_brand': '两次输入不一致'})
            return attrs
    

    模型层

    class Car(models.Model):
        COLOR_CHOICE = (
            (0, '银色'),
            (1, '黑色'),
            (2, '红色'),
            (3, '灰色')
        )
        name = models.CharField(max_length=64, verbose_name='名字', blank=True)
        color = models.IntegerField(choices=COLOR_CHOICE, default=0, verbose_name='颜色')
        price = models.DecimalField(max_digits=8, decimal_places=2, verbose_name='价格')
        image = models.ImageField(upload_to='img', default='img/default.png', verbose_name='图片')
        brand = models.CharField(max_length=64, verbose_name='厂商')
        create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    
        # 自定义序列化字段(插拔式,官方提倡使用)
        @property
        def car_car(self):
            return self.get_color_display()
    
        @property
        def img(self):
            from django.conf import settings
            return '%s%s%s' % (settings.BASE_URL, settings.MEDIA_URL, self.image)
    
        class Meta:
            verbose_name_plural = '汽车表'
    
        def __str__(self):
            return self.name
    
  • 相关阅读:
    git删除目录,且保留本地的
    gitpush 免密码
    git常用操作
    ubuntu安装Nodejs
    ubuntu如何配置samba
    用AI将png转成svg做字符图标教程
    windows server 2012设置远程连接断开后自动注销
    windows 2012执行计划任务错误:操作员或系统管理员拒绝了请求(0x800710E0)
    删除节点
    代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”。
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/12099686.html
Copyright © 2020-2023  润新知