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

3

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

版本1.0的django-registration文档说:

基本视图类故意与用户模型无关。只需对其进行子类化,并为您的自定义用户模型实现逻辑

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

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

有没有办法解决它?也许我也可以对注册配置文件进行子类化?我该怎么做?

谢谢。

3个回答

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'
)

这怎么有助于使用 Django 注册? - bodger

1
现在的情况很复杂。您需要:
  • 应用此补丁,因为在d-r-1.0中,models.py假定您的User模型具有“username”字段
  • 通过复制/粘贴/编辑registration/backends/default/views.py来创建自己的“后端”
  • 也要从registration/forms.py中复制/粘贴/编辑注册表单
  • 大多数时候,您可以使用注册视图而无需修改

问题涉及自定义用户和Django 1.5,因此我认为django-registration-email是一个糟糕的答案。这是针对Django<1.5的,它会创建虚假用户名并解决问题。


0

看起来不错。不幸的是,它似乎无法与自定义用户模型一起使用。管理器不可用; 用户已被替换为'thursdayfootball.Player' - bodger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接