美文网首页
序列化器Serializer

序列化器Serializer

作者: MkTom | 来源:发表于2018-07-03 13:25 被阅读0次

    序列化器(Serializer)的作用:

    1.进行数据的校验
    2.对数据对象进行转换
    
    
    # 定义序列化器  新建 serializers.py
    class HeroInfoSerializer(serializers.Serializer):
        """英雄数据序列化器"""
        GENDER_CHOICES = (
            (0, '男'),
            (1, '女')
        )
        id = serializers.IntegerField(label='ID', read_only=True)
        hname = serializers.CharField(label='名字', max_length=20)
        hgender = serializers.ChoiceField(choices=GENDER_CHOICES, label='性别', required=False)
        hcomment = serializers.CharField(label='描述信息', max_length=200, required=False, allow_null=True)
    
    

    期望伴雨飘过便会冲破命运困锁

    validators 验证器

    创建serializer对象

    Serializer(instance=None, data=empty, **kwarg)
    

    1)用于序列化时,将模型类对象传入instance参数
    2)用于反序列化时,将要被反序列化的数据传入data参数
    3)除了instance和data参数外,在构造Serializer对象时,还可通过context参数额外添加数据,如

    serializer = AccountSerializer(account, context={'request': request})
    
    

    序列化器把对象转换成为字典

    序列化器的验证

    使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。
    在获取反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回True,否则返回False。
    验证失败,可以通过序列化器对象的errors属性获取错误信息,返回字典,包含了字段和字段的错误。如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。
    验证成功,可以通过序列化器对象的validated_data属性获取数据。

    1.validators
    在字段中添加validators选项参数,也可以补充验证行为

    #自定义验证函数
    def about_django(value):
    if  'django' not in value.lower():
        raise serializers.ValidationError('图书不是关于Django的')
    return value
    
    # 字段中的写法
     validators=[about_django]
    

    2.validate_<field_name>

    class BookInfoSerializer(serializers.Serializer):
        """图书数据序列化器"""
        ...
        def validate_btitle(self, value):
            if 'django' not in value.lower():
                raise serializers.ValidationError("图书不是关于Django的")
            return value
    
    # 获取验证通过的数据(字典)
    serializer.validated_data
    

    保存

    模型类序列化器ModelSerializer

    DRF为我们提供了ModelSerializer模型类序列化器来帮助我们快速创建一个Serializer类。

    class BookInfoSerializer(serializers.ModelSerializer):
        """图书数据序列化器"""
        class Meta:
            model = BookInfo
            fields = '__all__'
    

    Json

    # json字符串
    var str1 = '{ "name": "deyuyi", "sex": "man" }';
    
    # json对象
    var str2 = { "name": "asan", "sex": "man" };
    
    # json对象转json字符串
    JSON.stringify(str2)
    
    
    # json字符串转json对象
    JSON.parse(str1)
    

    相关文章

      网友评论

          本文标题:序列化器Serializer

          本文链接:https://www.haomeiwen.com/subject/dilduftx.html