Использование email-адреса в качестве имени пользователя

В статье автор приводит пример, как можно использовать в Django адрес электронной почты в качестве имени пользователя. С примером Python-кода. Автор: Chris

Система авторизации, встроенная в Django воспринимает имя пользователя, написанное только с помощью букв и цифр. Поэтому, адреса электронной почты здесь не подходят. Однако, во многих случаях, Вы бы хотели  использовать адрес электронной почты в качестве имени пользователя. Этот фрагмент показывает Вам, как это можно сделать. Он имеет дополнительное преимущество в том, что если Вы хотите продолжить использовать обычный формат имени пользователя, то вы можете это сделать. Как бы "Два в одном"!

from django.contrib.auth.models import User
from django.core.validators import email_re

class BasicBackend:
    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

class EmailBackend(BasicBackend):
    def authenticate(self, username=None, password=None):
        #If username is an email address, then try to pull
        #it up
        if email_re.search(username):
            try:
                user = User.objects.get(email=username)
            except User.DoesNotExist:
                return None
        else:
            #We have a non-email address username we
            #should try username
            try:
                user = User.objects.get(username=username)
            except User.DoesNotExist:
                return None
        if user.check_password(password):
            return user

Чтобы использовать этот файл, сохраните его в ваш проект например как: email-auth.py

Затем добавьте следующие строки в ваш settings.py file:

AUTHENTICATION_BACKENDS = (
'yourproject.email-auth.EmailBackend',
)

Вы можете посмотреть полное выполнение здесь.

Оригинал статьи на djangosnippets.org

Перевод ООО «Комтет» komtet.ru