Django Registration Redux:如何将唯一标识符从用户名更改为电子邮件,并使用电子邮件作为登录名

Din*_* Xu 3 python django django-registration

我django-registration-redux在我的项目中用于用户注册.它使用默认User模型username作为唯一标识符.

现在我们想要丢弃username并email用作唯一标识符.

而且我们也希望使用email而不是username登录.

怎么做到这一点?

是否可以在不更改AUTH_USER_MODEL设置的情况下执行此操作?

因为它来自官方文件

如果要设置AUTH_USER_MODEL,则应在创建任何迁移或manage.py首次运行迁移之前进行设置.

Raj*_*hik 7

您可以覆盖此类注册表单

from registration.forms import RegistrationForm
class MyRegForm(RegistrationForm):
    username = forms.CharField(max_length=254, required=False, widget=forms.HiddenInput())

    def clean_email(self):
        email = self.cleaned_data['email']
        self.cleaned_data['username'] = email
        return email
Run Code Online (Sandbox Code Playgroud)

然后将其添加到设置文件(有关详细信息,请阅读此链接)

REGISTRATION_FORM = 'app.forms.MyRegForm'
Run Code Online (Sandbox Code Playgroud)

这会将电子邮件设置为用户名字段,然后一切都将工作,因为电子邮件现在是用户名.

唯一的问题是用户名字段在DB中的最大长度为30.因此,超过30个字符的电子邮件将引发数据库异常.为了解决覆盖用户模型(读这个细节).