Django REST framework学习笔记(二)

mac2024-04-10  35

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')

 

最新回复(0)