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

时间:2019-05-02 20:07:52

标签: python django django-views django-urls

我正在测试注册视图,我发现如果尝试使用现有的用户名进行注册,则会出现错误;如果我尝试使用现有的电子邮件进行注册,该应用程序将允许我进行注册。

很显然,我不希望有人在我的网站上用同一封电子邮件注册多个帐户。我是Django的新手,并且由于我注意到该表单检查了用户名是否已存在,因此我认为它将对电子邮件字段执行相同的操作。

我真的不知道该怎么做,我应该按自己的观点还是按照表格进行工作?我如何使其遍历数据库并查找是否已注册电子邮件?我以为$( "div.slider" ).scrollLeft( 300 );可以解决这个问题,但事实并非如此。 任何帮助表示赞赏。

这是我的观点:

email = form.cleaned_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})

2 个答案:

答案 0 :(得分:1)

比较“用户”模型中随电子邮件地址提供的电子邮件地址。

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 ')

答案 1 :(得分:0)

我认为最好的选择是对自己的用户模型进行编程,这将使您对电子邮件添加一个独特的限制,您可以查看documentation