参数校验的多种方式

参数校验的几种方式
如果默认的字段类型和选项不能满足需求,需要再补充校验行为,可以使用以下三种方法:

通过字段中的validators 选项进行校验
validate_<field_name>方法:对<field_name>字段进行验证
validate方法:对多个字段进行比较校验

一、通过 validators选项校验

在序列化器字段中添加validators选项参数进行校验,例如:

def validate_name(value):
    # 校验部门名称
    if not re.match('^[\u4e00-\u9fa5]+$', value):
        raise ValidationError('部门名称只能为中文')
    return value

class DepartmentSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True, label='ID')

    name = serializers.CharField(max_length=20, label='部门名称',
                                 required=True, allow_null=True, validators=[validate_name])

二、validate_:对<field_name>字段进行验证

注意:若校验失败,则 raise ValidationError异常

class DepartmentSerializer(serializers.Serializer):
    """部门数据序列化器"""
    ...
    def validate_name(self, value):
        # 校验部门名称
        if not re.match('^[\u4e00-\u9fa5]+$', value):
            raise ValidationError('部门名称只能为中文')
        return value

测试

>>> from users.models import *
>>> from users.serializers import *
>>> s = DepartmentSerializer(data={'name':'研-发部', 'create_date':'2018-1-1'})
>>> s.is_valid()
False
>>> s.errors
{'name': [ErrorDetail(string='部门名称只能为中文或英文字母', code='invalid')]}

三、validate:同时对多个字段进行比较验证

用户注册,校验两次输入的密码是否一致

# 模型: users/models.py
 class User(models.Model):
     password = models.CharField(max_length=30)

 # 序列化器: users/serializer.py
 class UserSerializer(serializers.Serializer):

     password = serializers.CharField(max_length=30, write_only=True)
     password2 = serializers.CharField(max_length=30, write_only=True)

     def validate(self, attrs):
         # 校验两次输入的密码是否正确
         password = attrs['password']
         password2 = attrs['password2']
         if password != password2:
             raise serializers.ValidationError('两次输入的密码不一样')
         return attrs

测试

 >>> from users.models import *
 >>> from users.serializers import *
 >>> s = UserSerializer(data={'password':'12345', 'password2': '12345x'})
 >>> s.is_valid()
 False
 >>> s = UserSerializer(data={'password':'12345', 'password2': '12345'})
 >>> s.is_valid()
 True
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
方法参数校验是一种保证代码正确性和安全性的重要手段,可以有效避免不必要的错误和漏洞。在 Java 中,可以使用一些开源的参数校验框架来实现方法参数校验,如: 1. Hibernate Validator:是一个基于 JSR 380 标准的参数校验框架,支持常用的校验注解,如@NotNull、@Size、@Email、@Pattern 等,可以通过在方法参数上添加注解来进行参数校验。 2. Apache Commons Validator:是一个 Apache 组织开源的校验框架,支持多种校验器,如 EmailValidator、CreditCardValidator、DateValidator 等,可以通过在方法中调用相应的校验器来进行参数校验。 3. Spring Validation:是 Spring 框架中的参数校验框架,支持 JSR 380 标准的注解,并且提供了一些扩展注解,如@NotBlank、@Range、@Valid 等,可以通过在方法参数上添加注解来进行参数校验。 以上三种参数校验框架都是比较常用的,可以根据自己的需求选择使用。在实际开发中,为了保证代码的可读性和可维护性,通常建议将参数校验的逻辑封装在一个单独的方法中,如: ``` public void doSomething(String param1, int param2) { checkParam1(param1); checkParam2(param2); // do something with param1 and param2 } private void checkParam1(String param1) { if (param1 == null || param1.isEmpty()) { throw new IllegalArgumentException("param1 is required"); } // other checks if necessary } private void checkParam2(int param2) { if (param2 < 0) { throw new IllegalArgumentException("param2 must be positive"); } // other checks if necessary } ``` 这样可以将参数校验和业务逻辑分离,使代码更加清晰明了。同时,也可以通过单元测试来验证参数校验的正确性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值