Попытка переопределить проверку имени пользователя модели пользователя 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'
Другие вопросы по тегам