Python 如何在Django项目中设置唯一的邮件注册?

Python 如何在Django项目中设置唯一的邮件注册?,python,django,django-views,django-urls,Python,Django,Django Views,Django Urls,我在测试我的注册视图,我注意到如果我尝试使用alreaxy现有用户名注册,我会得到一个错误;如果我尝试使用现有的电子邮件注册,应用程序将允许我这样做 显然,我不希望有人在我的网站上用同一封电子邮件注册多个帐户。我是Django的新手,因为我注意到表单会检查用户名是否已经存在,所以我想它会对email字段做同样的检查 我真的不知道该怎么做,我应该在我的观点上工作还是在表格上工作?我怎样才能让它在数据库中循环并找到是否已经注册了电子邮件?我原以为email=form.cleaned\u data.g

我在测试我的注册视图,我注意到如果我尝试使用alreaxy现有用户名注册,我会得到一个错误;如果我尝试使用现有的电子邮件注册,应用程序将允许我这样做

显然,我不希望有人在我的网站上用同一封电子邮件注册多个帐户。我是Django的新手,因为我注意到表单会检查用户名是否已经存在,所以我想它会对email字段做同样的检查

我真的不知道该怎么做,我应该在我的观点上工作还是在表格上工作?我怎样才能让它在数据库中循环并找到是否已经注册了电子邮件?我原以为
email=form.cleaned\u data.get('email')
会奏效,但事实并非如此。 感谢您的帮助

以下是我的看法:

def register(request):
    if request.method == "POST":
        form = NewUserForm(request.POST)
        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')
            email = form.cleaned_data.get('email')
            messages.success(request, f"New Account Created: {username}")
            login(request, user)
            messages.info(request, f"You are now logged in as {username}")
            return redirect("main:homepage")
        else:
            for msg in form.error_messages:
                messages.error(request, f"{msg}: {form.error_messages[msg]}")


    form = NewUserForm
    return render(request,
                  "main/register.html",
                  context={"form":form})
以下是表格:

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


    class Meta:
        model = User
        fields = ("username", "email", "password1", "password2")


    def save(self, commit=True):
        user = super(NewUserForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        if commit:
            user.save()
        return user

我认为最好的选择是编写自己的用户模型,这将允许您添加对电子邮件的唯一限制,您可以查看

比较用户模型中提供的电子邮件地址与电子邮件地址

if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')
            email = form.cleaned_data.get('email')
    if User.objects.filter(email__exact=email).count() == 0:
            messages.success(request, f"New Account Created: {username}")
            login(request, user)
            messages.info(request, f"You are now logged in as {username}")
            return redirect("main:homepage")
    else:
      return HttpResponse('This email address is already registered ')


嘿我刚试过,不幸的是它似乎不起作用。我正在努力找出错误所在!请参考,希望有帮助。