python - WTForms 验证器 NoneOf 未正确激活

我正在尝试制作一个在 WTForms 中使用空格和逗号回退用户名的表单。我尝试使用 NoneOf 验证器,但它没有激活。有什么建议么?我将用户名命名为 rusername 以消除我的页面与登录页面的冲突。

这是我的表格供参考。

class RegistrationForm(FlaskForm):
    rusername = StringField(_l('Username'), validators=[DataRequired(), NoneOf([',', ' '], "Invalid value, can't be any of: %(values)s")])
    rpassword = PasswordField(_l('Password'), validators=[DataRequired()])
    rpassword2 = PasswordField(_l('Repeat Password'), validators=[DataRequired(), EqualTo('rpassword')])
    recaptcha = RecaptchaField()
    signupsubmit = SubmitField(_l('Register'))

    def validate_rusername(self, rusername):
        user = User.query.filter_by(username=rusername.data).first()
        if user is not None:
            raise ValidationError(_('Username taken :( Please use a different one.'))

这是模板中的代码。它可以正常加载并且运行良好,但 NoneOf 验证不会运行。

{{ registrationForm.rusername(placeholder='Username', rows='1', maxlength='300', class='input form-control') }}

回答1

NoneOf 验证器检查完全匹配(例如,作为用户名的坏词)。如果要进行类似正则表达式的验证,则需要使用 https://wtforms.readthedocs.io/en/3.0.x/validators/#wtforms.validators.Regexp

rusername = StringField(_l('Username'), validators=[
    DataRequired(), 
    Regexp('^[\w-]+$', message='Username can contain only alphanumeric characters (and _, -).'),
])

https://docs.python.org/3/library/re.html#regular-expression-syntax 用户名包含字母数字字符、下划线和破折号。您也可以添加其他特殊字符。

相似文章