试图覆盖 Django 用户模型用户名验证

Trying to override Django User model username validation

我正在尝试覆盖 Django 默认用户模型用户名字段以允许在用户名中使用主题标签。

我知道模型本身会让我这样做,但标准表格注册似乎不允许这样做。我也在使用 django-allauth。

如何替换默认用户模型表单中的正则表达式以允许在用户名中使用井号标签?

django-allauth 有很多配置,其中一个选项是为用户名设置验证器

ACCOUNT_USERNAME_VALIDATORS

为了更好的参考,您可以查看 https://django-allauth.readthedocs.io/en/latest/configuration.html

ACCOUNT_USERNAME_VALIDATORS 接受自定义用户名验证器的路径列表。所以,你可以这样定义:

ACCOUNT_USERNAME_VALIDATORS = ('myproject.myapp.validators.custom_username_validators')

并且在指定的路径中 'myproject.myapp.validators.CustomUsernameValidtor' 你必须定义一个验证器 class 如:

import re
from django.utils.deconstruct import deconstructible
from django.utils.translation import ugettext_lazy as _

@deconstructible
class CustomUsernameValidator(object):
    message = _('Invalid username')

    def __call__(self, value):
        if not re.match(r'[a-zA-Z0-9_@#-]+', value)
            raise DjangoValidationError(self.message, code='invalid_username')

希望对您有所帮助。

此致。

我发现我实际上遇到了软件中的错误。

https://github.com/pennersr/django-allauth/pull/1648

对于发生在...的任何其他人。

参考 Javier 的修复,您的验证器文件应如下所示:

import re
from django.utils.deconstruct import deconstructible
from django.utils.translation import ugettext_lazy as _
from django.core.exceptions import ValidationError

@deconstructible
class CustomUsernameValidator(object):
    message = _('Invalid username')

    def __call__(self, value):
        if not re.match(r'[a-zA-Z0-9_@#-]+', value):
            raise ValidationError(self.message, code='invalid_username')


custom_usename_validator = [CustomUsernameValidator()]

你的 settings.py 文件:

ACCOUNT_USERNAME_VALIDATORS = 'mypath.to.validators.custom_usename_validator'