序列化器Serializer

序列化器(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)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容