序列化器(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)
网友评论