为了干和简单,我想继承Django's RegexValidator。
我试过了:
class UsernameValidator(RegexValidator):
regex = r'^([a-zA-Z]{4}[\w]{1,16})$'
message = 'Wrong username format.'
code = 'invalid_format'
我以这种方式将此验证器添加到我的字段中:
class RegistrationForm(forms.Form):
signup_username = forms.CharField(label='Username', max_length=20,
validators=[UsernameValidator])
但如果我使用错误的用户名(如123
或abc
),验证器不会失败。
从RegexValidator
继承的正确方法是什么?
我需要在几个方面进行验证,这就是为什么我需要一个自己的验证器。
答案 0 :(得分:1)
创建RegexValidator的实例。
validate_username = RegexValidator(regex=r'^([a-zA-Z]{4}[\w]{1,16})$',
message = 'Wrong username format.',
code = 'invalid_format')
...validators = [validate_username]...
答案 1 :(得分:0)
我编写了一个自己的函数,而不是继承RegexValidator,这很有效。
def validate_username(value):
regex = r'^([a-zA-Z]{4}[\w]{1,16})$'
if not re.match(regex, value):
raise ValidationError('Wrong username format.')
答案 2 :(得分:0)
Validators参数应该是可调用对象的列表 在你的情况下它应该是
validators=[UsernameValidator()]