• rest_framework-序列化-总结完结篇


    #rest_framework 序列化
    from rest_framework import serializers
    
    #serilizers.Serializer serializers.ModelSerializer 两种序列化方式
    
    class RolesSerializer(serializers.Serializer):
        id = serializers.IntegerField()
        title = serializers.CharField()
    
    class RolesView(APIView):
        def get(self, request, *args, **kwargs):
            #方式1
            #roles = models.Role.objects.all().values('id','title')
            #roles = list(roles)
            #ret = json.dumps(roles, ensure_ascii=False)
    
            #方式2-1
            roles = models.Role.objects.all()
            ser = RolesSerializer(instance=roles, many=True)
            ret = json.dumps(ser.data, ensure_ascii=False)
            return HttpResponse(ret)
    
            #方式2-2
            roles = models.Role.objects.all().first()
            ser = RolesSerializer(instance=roles, many=False)
            ret = json.dumps(ser.data, ensure_ascii=False)
            return HttpResponse(ret)
    
    class UserInfoSerializer(serializers.Serializer):
        username = serializer.CharField()
        password = serializer.CharField()
        user_type = serializer.IntegerField()
    
        #user_type = serializer.Charield(source="get_user_type_display")  #找到每一行的对象 row.user_type
                                                              # row.get_user_type_display  就可以对choices进行层级的字符
                                                              #可执行
    
        gp = serializers.CharField(source="group.title")  #外键group关联Group表,通过.获取Group表字段参数
        #显示 [{"username":"ljc", "password":"123", "user_type":"VIP", "gp":"A组"}]
    
        #多对多 manytomany 不能通过source  通过serializers.SerializerMethodField()
        roles = serializers.SerializerMethodField() #自定义显示
        def get_roles(self, row):
    
            role_obj_list = row.roles.all() #获取角色对象
            ret = []
            for item in role_obj_list:
                ret.append({'id':item.id, 'title':item.title})
            return ret
    
    class UserInfoView(APIView):
        def get(self, request, *args, **kwargs):
            users = models.UserInfo.objects.all()
            ser = UserInfoSerializer(instance=users, many=True)
            ret = json.dumps(ser.data, ensure_ascii=False)
    
            return HttpResponse(ret)
    
    #方式3
    class UserInfoSerializer(serializers.ModelSerializer):
        user_type = serializer.Charield(source="get_user_type_display")  #混合使用
    
        roles = serializers.SerializerMethodField() #自定义显示
        class Meta:
            model = models.UserInfo
            #fields = "__all__"  全部自动生成
            #fields = ['id', 'username', 'password'] #自定义
            #fields = ['id', 'username', 'password', 'user_type']
            fields = ['roles'] #复杂的
    
            def get_roles(self, row):
    
                role_obj_list = row.roles.all() #获取角色对象
                ret = []
                for item in role_obj_list:
                    ret.append({'id':item.id, 'title':item.title})
    
    
    
    class UserInfoView(APIView):
        def get(self, request, *args, **kwargs):
            users = models.UserInfo.objects.all()
            ser = UserInfoSerializer(instance=users, many=True)
            ret = json.dumps(ser.data, ensure_ascii=False)
    
            return HttpResponse(ret)
    
    #小清新版
    class UserInfoSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.UesrInfo
            fields = "__all__"
            depth = 1  #这个就可以将所有的数据都显示了  默认为0 只是关联本表的数据 depth最好0-4层就好了
                       #表与表之间的manytomany onetoone foreignkey 表示一层 第二个表再关联 就2层  连表操作
    class UserInfoView(APIView):
        def get(self, request, *args, **kwargs):
    
            users = models.UserInfo.objects.all()
            ser = UserInfoSerializer(instance=users, many=True)
    
            ret - json.dumps(ser.data, ensure_ascii=False) #ensure_ascii=False 显示中文
            return HttpResponse(ret)
  • 相关阅读:
    C#缓存初步学习
    C#性能优化杂七杂八的总结
    C#常用的加密算法:MD5、Base64、SHA1、SHA256、HmacSHA256、DES、AES、RSA
    C# RAS生成.NET公钥与私钥以及.NET公钥与私钥转Java公钥私钥类
    SqlSever查询某个表或某个库的列名称、说明、备注、注释,类型等
    常用Git命令清单
    .NET Core 3.0X及以上版本的EFCore连接MySql 8.022
    ASP.NET Core 3.X后出现 [The JSON value could not be converted to System.Nullable] 错误
    从遥感影像到土地利用转移矩阵
    利用Jenkins+SVN+Windows服务对NetCore项目实行持续集成、自动化部署CI/CD
  • 原文地址:https://www.cnblogs.com/Liang-jc/p/9399024.html
Copyright © 2020-2023  润新知