zoukankan      html  css  js  c++  java
  • Django Rest framework 序列化

    1 序列化入门

    class RoleSerializer(serializers.Serializer):
        id = serializers.IntegerField()
        title = serializers.CharField()
        label = serializers.CharField()
    

    2 进阶序列化1

    class UserSerializer(serializers.Serializer):
        id = serializers.IntegerField()
        username = serializers.CharField()
        nick_name = serializers.CharField()
        password = serializers.CharField()
        state = serializers.BooleanField()
        is_super = serializers.BooleanField()
        last_login = serializers.DateTimeField()
    
        #一对一关系
        #roles = serializers.CharField(source="roles.title")
    
        # 多对多,SerializerMethodField(),表示自定义显示
        # 然后写一个自定义的方法
        roles = serializers.SerializerMethodField()
    
        def get_roles(self,row):
            role_obj = row.roles.all()
            ret = []
            for i in role_obj:
                ret.append({'id':i.id,'title':i.title})
            return ret
    

    3 进阶序列化2

    class UserSerializer(serializers.ModelSerializer):
        #一对一关系
        #roles = serializers.CharField(source="roles.title")
    
        # 多对多,SerializerMethodField(),表示自定义显示
        # 然后写一个自定义的方法
        roles = serializers.SerializerMethodField()
    
        def get_roles(self,row):
            role_obj = row.roles.all()
            ret = []
            for i in role_obj:
                ret.append({'id':i.id,'title':i.title})
            return ret
        class Meta:
            model = models.Users
            fields = ['id','username','nick_name','password','roles']
    

    4 序列化进阶3,自动序列化连表

    class UserSerializer(serializers.ModelSerializer):
        class Meta:
            model = models.Users
            fields = "__all__"
            # 连表的深度
            depth = 1
    

    5 序列化进阶4,生成URL

    class UserSerializer(serializers.ModelSerializer):
        roles = serializers.HyperlinkedIdentityField(view_name='roleId',many=True,lookup_url_kwarg='id')
        class Meta:
            model = models.Users
            fields = "__all__"
            # 连表的深度
            depth = 1
    class UsersView(APIView):
        def get(self,request,*args,**kwargs):
            ret = {'code':1000,'msg':None,'data':None}
            try:
                obj = models.Users.objects.all()
                #使用HyperlinkedIdentityField生成URL,这里必须要传参数context={'request':request}
                ser = rbac_serializers.UserSerializer(instance=obj, many=True,context={'request':request})
                ret['data'] = ser.data
            except Exception as e:
                logger.error(e)
            return Response(ret)
    

      

    6 序列化进阶5,自定义验证规则

    #定义验证规则
    class GroupValidation(object): def __init__(self,base): self.base = base    #__call__(),该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用 def __call__(self, value): if not value.startswith(self.base): message = "标题必须以%s为开头"%self.base raise serializers.ValidationError(message) class UserGroupSerializer(serializers.Serializer):
       #序列化中加入字段校验 title = serializers.CharField(validators=[GroupValidation('以我开头'),]) class UserGroupView(APIView): def post(self,request,*args, **kwargs): ser = UserGroupSerializer(data=request.data) if ser.is_valid(): print(ser.validated_data['title']) else: print(ser.errors) return HttpResponse("用户提交数据验证")

      

  • 相关阅读:
    Spring 中出现Element : property Bean definitions can have zero or more properties. Property elements correspond to JavaBean setter methods exposed by the bean classes. Spring supports primitives, refer
    java定时器schedule和scheduleAtFixedRate区别
    hql语句中的select字句和from 字句
    使用maven搭建hibernate的pom文件配置
    Failure to transfer org.apache.maven:maven-archiver:pom:2.5 from http://repo.maven.apache.org/ maven2 was cached in the local repository, resolution will not be reattempted until the update interv
    对于文件File类型中的目录分隔符
    hibernate的事务管理和session对象的详解
    解决mac 中的myeclipse控制台中文乱码问题
    ibatis selectKey用法问题
    Java中getResourceAsStream的用法
  • 原文地址:https://www.cnblogs.com/xiao2er/p/13292036.html
Copyright © 2011-2022 走看看