Попытка переопределить проверку имени пользователя модели пользователя Django
Я пытаюсь переопределить поле имени пользователя модели пользователя по умолчанию в django, чтобы разрешить хэштеги в именах пользователей.
Я знаю, что сама модель позволит мне сделать это, но стандартная регистрация формы, кажется, не позволяет это. Я использую также Джанго-Аллаута.
Как заменить регулярное выражение в форме модели пользователя по умолчанию, чтобы разрешить хэштег в имени пользователя?
3 ответа
У 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')
Надеюсь, это поможет вам.
С уважением.
Я обнаружил, что на самом деле я столкнулся с ошибкой в программном обеспечении.
https://github.com/pennersr/django-allauth/pull/1648
Для кого-то еще, что происходит.
Что касается исправления Хавьера, ваш файл валидаторов должен выглядеть следующим образом:
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'