我试图覆盖django默认用户模型用户名字段以允许用户名中的主题标签。
我知道模型本身会让我这样做,但标准表单注册似乎不允许它。我也在使用django-allauth。
如何替换默认用户模型表单中的正则表达式以允许用户名中的#标签?
答案 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)
答案 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'