使用电子邮件作为django-registration的用户名

时间:2013-07-24 10:00:05

标签: django django-registration django-1.5

我正在尝试使用电子邮件地址作为用户名(使用Django 1.5的自定义用户模型)以及django-registration。

django-registration 1.0版的文档说: -

  

基本视图类是故意与用户模型无关的。简单地将它们子类化,并为您的自定义用户模型实现逻辑

我已经对注册视图进行了子类化,但不幸的是,看起来RegisterProfile仍然希望用户模型具有我的用户名字段。我只有电子邮件(以及名字,姓氏等)

这是一个错误吗?在我看来,django-registration仍然需要使用默认的基本用户模型 - 它只能使用ADDS到基本模型的自定义用户模型。

有什么办法吗?也许我可以将注册档案子类化?我该怎么做?

感谢。

3 个答案:

答案 0 :(得分:2)

如果您继续使用默认用户配置文件,我认为从长远来看,事情会更容易。如果您只是尝试添加使用电子邮件地址登录的功能,我建议您创建一个新的身份验证后端:

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User


class EmailModelBackend(ModelBackend):
    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(email__iexact=username)
            if user.check_password(password):
                return user
        except User.DoesNotExist:
            return None

然后您需要将该后端发送到settings.py:

AUTHENTICATION_BACKENDS = (
    'yourproject.yourapp.yourmodule.EmailModelBackend',
    'django.contrib.auth.backends.ModelBackend'
)

答案 1 :(得分:1)

原样,它很复杂。你需要:

  • apply this patch因为在d-r-1.0中,models.py假定您的用户模型有“用户名”字段
  • 通过复制/粘贴/编辑注册/后端/ default / views.py创建自己的“后端”
  • 从registration / forms.py
  • 复制/粘贴/编辑注册表
  • 大部分时间您可以使用注册视图而无需修改

问题是关于自定义用户和Django 1.5,所以我认为django-registration-email是一个糟糕的答案。 Thisi适用于Django< 1.5,创建虚假用户名并扭转问题。

答案 2 :(得分:0)

这可能会帮助你:

https://pypi.python.org/pypi/django-registration-email/0.5.1

他们已经在django-registration

中实现了这一点