我们首先要明确什么是反序列化操作
反序列化操作:JOSN数据 --> 字典数据 --> 验证通过的字典数据 --> 模型数据
我们在进行反序列化操作时,首先要保证就是要拿到的字典数据一定要通过认证
1、定义一个序列化器
from rest_framework import serializer
class UserSerializer(serializers.Serializer):
'''定义用户Serializer序列化器'''
# 这里的字段需要和模型类中的字段名、字段类型、约束一致
name = serializers.CharField(max_length=20) # 姓名
age = serializers.IntegerField() # 年龄
address = serializers.CharField(max_length=20) # 地址
2、准备JSON数据或字典数据
data = {'name':'某XX','age':19,'address':'河南'}
3、验证字典数据
我们使用序列化器对象点出is_valid()方法进行验证。验证成功返回True,否则返回False
data = {'name':'某XX','age':19,'address':'河南'}
user_ser = UserSerializer(data=data)
if user_ser.is_valid(): # 如果验证成功,则保存数据返回
user_ser.save()
return Response({'msg':'OK','code':200})
else: # 如果验证失败,则返回错误errors
return Response({'error': user_ser.errors})
4、对单一字段进行验证
我们需要在序列化器类中定义一个名字wei(validata_字段名) 的方法,来补充验证逻辑
def validate_name(self, attrs):
'''
对name字段进行验补充
:param value: 前段传递的name数据
:return: 验证成功:返回value;验证失败:返回错误信息
'''
if attrs != 'peter':
raise serializer.ValidationError('不是peter本人')
return attrs
5、对所有字段进行验证
def validate(self, attrs):
'''
对多个字段进行验证
:param attrs: 前段传递的字典数据
:return: 验证成功:返回attrs;验证失败:返回错误信息
'''
name = attrs['name']
print(name)
if name != 'peter':
# 失败
raise serializer.ValidationError('不是peter本人')
# 成功
return attrs
6、添加数据,重写create方法
def create(self,validated_data):
'''
序列化器进行新增数据的方法
:param validated_data: 通过验证的字典数据
:return:根据RESTful设计方式,需要将添加的数据返回
'''
return User.objects.create(**validated_data)
7、修改数据,需要在序列化器类中定义一个update()方法
def update(self, instance, validated_data):
'''
序列化器进行修改数据的方法
:param instance: 需要修改的模型对象
:param validated_data: 前端传递的字典数据
:return: 根据RESTful设计方式,需要将修改的数据返回
'''
# 新值覆盖旧值
instance.字段名 = validated_data.get(字段名)
instance.save()
return instance