serializer.py
'''反序列化器的create和update操作'''
class Student2(serializers.Serializer):
name = serializers.CharField(max_length=10, min_length=2)
age = serializers.IntegerField(max_value=150, min_value=0)
sex = serializers.CharField(required=True, validators=[check_user_sex])
def validate_name(self, data):
'''验证单个数据'''
if data == 'root':
raise serializers.ValidationError('这个字段不能为root')
# 验证方法结束时必须返回本次验证的内容
return data
def validate(self, attrs):
'''一次验证多个数据'''
age = attrs.get('age')
if age <= 10:
raise serializers.ValidationError('年龄不能小于10')
return attrs
'''
在完成验证数据之后,drf提供了request和response来接收和返回数据,
1. create
2. update
'''
def create(self, validated_data):
'''接受客户端提交的数据'''
name = validated_data.get('name')
age = validated_data.get('age')
sex = validated_data.get('sex')
instance = Student.objects.create(
name=name,
age=age,
sex=sex
)
return instance
def update(self, instance, validated_data):
'''用于在反序列中对于验证完成的数据进行保存更新'''
name = validated_data.get('name')
age = validated_data.get('age')
sex = validated_data.get('sex')
instance.name = name
instance.age = age
instance.sex = sex
instance.save()
return instance
views.py
class StudentView2(View):
'''create'''
def post(self, request):
# 模拟用户提交数据
data = {
'name': 'cccccccc',
'age': 11,
'sex': '女',
}
serializer = Student2(data=data)
# raise_exception抛出错误信息,并阻止程序继续往后运行
result = serializer.is_valid(raise_exception=True)
serializer.save()
return HttpResponse('ok')
class StudentView3(View):
'''update'''
def put(self, request, id):
student_obj = Student.objects.get(id=id)
data = {
'name': 'cccccccc',
'age': 18,
'sex': '女',
}
serializer = Student2(instance=student_obj, data=data)
result = serializer.is_valid(raise_exception=True)
serializer.save()
return HttpResponse('ok')