繁体   English   中英

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

[英]How can i set unique mail registration in my Django project?

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

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

我真的不知道该怎么做,我应该在我的观点还是在表格上? 我如何使其遍历数据库并查找是否已注册电子邮件? 我以为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})

形式如下:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM