如何避免用户在Django中注册已使用的电子邮件?

时间:2019-05-03 12:35:27

标签: python django django-views django-urls

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

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

我真的不知道该怎么做,我应该按自己的观点还是按照表格进行工作?我如何使其遍历数据库并查找是否已注册电子邮件?我以为const input = {"concepts":[{"id_cpt":"1","fr_cpt":"Proche",},{"id_cpt":"2","fr_cpt":"Loin",},{"id_cpt":"3","fr_cpt":"Here",},],"arcs":[{"idfrom":"1","idto":"2"},{"idfrom":"3","idto":"2"},]} let nodes = [], links = [], map = {}; for (const { id_cpt, fr_cpt } of input.concepts) { nodes.push({ id: fr_cpt }); map[id_cpt] = fr_cpt } for (const { idfrom, idto } of input.arcs) { links.push({ source: map[idfrom], target: map[idto] }) // get the value using map } const output = { nodes, links } console.log(output)可以解决这个问题,但事实并非如此。 任何帮助表示赞赏。

这是我的观点:

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

1 个答案:

答案 0 :(得分:2)

根据您的代码,所有您需要做的就是从表单中产生一个 ValidationError


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

    def clean_email(self):
        if User.objects.filter(email=self.cleaned_data['email']).exists():
            raise forms.ValidationError("the given email is already registered")
        return self.cleaned_data['email']

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