我正在尝试制作一个在 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 用户名包含字母数字字符、下划线和破折号。您也可以添加其他特殊字符。