python - 如何让 Django 使用电子邮件而不是用户名注册用户

标签 python django python-3.x django-forms django-views

我正在尝试制作一个使用名字、姓氏、电子邮件和密码注册用户的网站。我已经尝试编写此表单并在 View 中使用它

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm


class RegisterationForm(UserCreationForm):
    email = forms.EmailField(required=True)

    class Meta:
        model = User
        fields = (
            'first_name',
            'last_name',
            'email',
            'password1',
            'password2',
        )

    def save(self, commit=True):
        user = super(RegisterationForm, self).save(commit=False)
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        user.email = self.cleaned_data['email']

        if commit:
            user.save()
        return user

并在 View 中使用它

from django.shortcuts import render, redirect
from Users.forms import RegisterationForm
from django.contrib.auth import authenticate, login




def home(request):
    return render(request, 'Users/index.html')


def register (request):
    if request.method == 'POST':
        form = RegisterationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/map_page/')
    else:
        form = RegisterationForm()
        args = {'form': form}
        return render(request, 'Users/index.html', args)

但是当我这样做并填写它时,我得到一个错误 UNIQUE 约束失败:auth_user.username

我想知道是否有一种方法可以不使用用户名并让他们使用密码和电子邮件注册和登录。

我尝试制作一个后端并将其包含在设置中,但没有成功。然后我也尝试使用自定义模型并将其包含在 admin.py 中。我还将它包含在设置中,但它给我带来了奇怪的错误。

如何以简单的方式使用电子邮件而不是用户名注册用户?

最佳答案

我认为最简单的解决方法是设置 user.username = user.email

这个问题主要是由于用户名为空引起的,这对第一个用户来说没问题,但对第二个用户来说是唯一的失败。

另一种选择是从用户模型中删除字段用户名。

https://docs.djangoproject.com/en/2.0/topics/auth/customizing/

自定义用户类(用户): 用户名 = 无

关于python - 如何让 Django 使用电子邮件而不是用户名注册用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48605384/

相关文章:

python - 在 Django 管理中为每个模型添加自定义字段

python - 如何在 CircleCI 2.0 中显式添加项目到 Python 路径?

django - 如何限制 django admin 内联表单集

python - BS4 : How would I remove unncessary html tags and only keep the <p> and <ruby> tags?

Python asyncio任务列表生成而不执行函数

python - 具有透明度的 PyGTK StatusIcon

python - 计算函数在某一点的导数 Python 2.7

python - Pandas - 找到没有 Nan 值的最长延伸

django - 如何从django中的db中获取数据 block 然后删除它们?

python - 如何将每个句子的第一个字母大写?