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

时间:2017-03-29 23:40:34

标签: django django-1.10

我试图覆盖django默认用户模型用户名字段以允许用户名中的主题标签。

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

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

3 个答案:

答案 0 :(得分:0)

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'中,您必须定义一个验证器类,如:

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')

希望这可以帮到你。

问候。

答案 1 :(得分:0)

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

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

对于其他任何发生的人。

答案 2 :(得分:0)

关于Javier's Fix,您的验证器文件应如下所示:

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'