我正在尝试制作一个使用名字、姓氏、电子邮件和密码注册用户的网站。我已经尝试编写此表单并在 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/