django.auth манипулирует полями модели / разрешает пространство в именах пользователей - PullRequest
2 голосов
/ 22 марта 2012

В настоящее время я выполняю регистрацию пользователя для приложения.Я пытаюсь изменить поведение django.auth по умолчанию, чтобы использовать электронную почту вместо имени пользователя.Я думаю, что я буду использовать пользовательский бэкэнд аутентификации.Я хочу, чтобы пользователи все еще могли предоставить имя пользователя.

  1. Как разрешить использование пробелов в имени пользователя, например "john doe", без изменения полей в моделях django.auth.

  2. Как мнесделать поле электронной почты обязательным.в настоящее время метод clean_email в моей форме UserCreation вызывает ошибку проверки, если электронная почта пуста.Должен быть лучший способ.

Благодаря Брэндону и Эндрю Санду вот мое решение:

class RegisterForm(UserCreationForm):
    username = forms.RegexField(label=("Username"), max_length=30, regex=r'^[ \t\r\n\f\w.@+*-]+$',
        help_text = ("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."),
        error_messages = {'invalid': ("This value may contain only letters, numbers and @/./+/-/_ characters.")})
class Meta:
    model = User

Я скопировал поле из UserCreationForm.Важной частью является добавление \ t \ r \ n \ f к регулярному выражению.\ s не будет работать.

Ответы [ 3 ]

2 голосов
/ 22 марта 2012

Вы всегда можете переопределить UserCreationForm из contrib.auth.forms, чтобы реализовать другое поле для имени пользователя и предоставить свою собственную проверку.Просто наследуйте форму и добавьте свое собственное поле имени пользователя или переопределите его в __init__ класса.

1 голос
/ 31 мая 2012

Может быть, вы хотели бы использовать validate_slug :

Экземпляр RegexValidator, который гарантирует, что значение состоит только из букв, цифр, подчеркиваний или дефисов

0 голосов
/ 22 марта 2012

Для имени пользователя: переопределите UserCreationForm (django.contrib.auth.forms), чтобы изменить параметр регулярного выражения для поля, чтобы оставить пробелы.Никаких изменений в модели не требуется.

Для электронной почты: http://djangosnippets.org/snippets/74/

...