serializer.py
'''
在drf中,对于客户端提供的数据,往往需要验证数据的有效性,这部分代码写在序列化器中
在序列化器中提供了三个方法验证数据
1. 内置选项,字段声明的小括号中,以选项存在作为验证提交
2. 自定义方法,在序列化器中作为对象方法来提供验证 [ 这部分验证的方法必须以"validate_<字段名>"或"validate"作为方法名 ]
3. 自定义函数,在序列化器外部,提前声明一个验证代码,然后再字段声明的小括号中,通过"validators=[验证函数1,验证函数2]"
'''
def check_user_sex(sex):
'''自定义验证函数'''
if sex not in ['男', '女']:
raise serializers.ValidationError('性别必须是男或女')
return sex
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('年龄不能小于0')
return attrs
views.py
class StudentView2(View):
def post(self, request):
# 模拟用户提交数据
data = {
'name': 'cuimengtao',
'age': 1,
'sex': '1',
}
serializer = Student2(data=data)
# raise_exception抛出错误信息,并阻止程序继续往后运行
result = serializer.is_valid(raise_exception=True)
print(result)
print('错误信息:', serializer.error_messages)
return HttpResponse('ok')