3

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

django-registration 1.0 版的文档说:-

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

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

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

有没有办法绕过它?也许我也可以子类化注册资料?我该怎么做?

谢谢。

4

3 回答 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'
)
于 2013-08-25T23:19:14.637 回答
1

照原样,这很复杂。你需要:

  • 应用此补丁,因为在 dr-1.0 中,models.py 假定您的用户模型有一个“用户名”字段
  • 通过复制/粘贴/编辑registration/backends/default/views.py来创建自己的“后端”
  • 复制/粘贴/编辑注册表以及从registration/forms.py
  • 大多数情况下,您无需修改​​即可使用注册视图

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

于 2013-10-28T20:42:02.003 回答
0

这可能会帮助你:

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

他们已经在 django-registration 中实现了这一点

于 2013-10-23T19:45:23.400 回答