【发布时间】:2017-08-23 16:20:58
【问题描述】:
我正在尝试覆盖 django 默认用户模型用户名字段以允许用户名中的主题标签。
我知道模型本身会让我这样做,但标准表单注册似乎不允许这样做。我也在使用 django-allauth。
如何替换默认用户模型表单中的正则表达式以允许用户名中包含井号标签?
【问题讨论】:
标签: django django-1.10
我正在尝试覆盖 django 默认用户模型用户名字段以允许用户名中的主题标签。
我知道模型本身会让我这样做,但标准表单注册似乎不允许这样做。我也在使用 django-allauth。
如何替换默认用户模型表单中的正则表达式以允许用户名中包含井号标签?
【问题讨论】:
标签: django django-1.10
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')
希望对你有帮助。
问候。
【讨论】:
【讨论】:
参考 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'
【讨论】: