drf 序列化 校验

序列化器Serializer

class DepartSerializer(serializers.Serializer):
    name = serializers.CharField(required=True, max_length=3, min_length=2)
    age = serializers.IntegerField(required=True, max_value=99, min_value=14)
    gender = serializers.ChoiceField(choices=((1, 'MALE'), ("2", 'FEMale')))
    # email = serializers.EmailField()
    from django.core.validators import RegexValidator, EmailValidator
    email = serializers.CharField(validators=[EmailValidator(message='邮箱格式错误')])
    other = serializers.CharField(validators=[RegexValidator('填写正则', message='错误信息')])

    def validate_name(self, value):
        if value != 'szw':
            raise exceptions.ValidationError('字段钩子校验失败')
        return value

    def validate(self, attrs):
        print(attrs)
        raise exceptions.ValidationError('全局钩子校验失败')

序列化器ModelSerializer

class DepartSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Depart
        fields = '__all__'
        extra_kwargs = {
            "name": {"max_length": 3, "min_length": 2},
            "gender": {"choices": ((1, 'MALE'), ("2", 'FEMale'))},
            "email": {"validators": [EmailValidator(message='邮箱格式错误')]}
        }

    def validate_name(self, value):
        if value != 'szw':
            raise exceptions.ValidationError('字段钩子校验失败')
        return value

    def validate(self, attrs):
        print(attrs)
        raise exceptions.ValidationError('全局钩子校验失败')

settings

REST_FRAMEWORK = {
    # 全局校验钩子抛出异常的key
    "NON_FIELD_ERRORS_KEY": "EXTRA"
}
posted @ 2022-10-06 08:56  Sherwin_szw  阅读(30)  评论(0编辑  收藏  举报