检查电子邮件的唯一性。注册django

时间:2020-07-03 18:41:07

标签: python django

我正在尝试在Django上创建注册。注册期间,我无法检查电子邮件字段的唯一性。

ursl.py

path('accounts/register/', MyRegisterFormView.as_view(), name="register"),

forms.py

class Register(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']

views.py

class MyRegisterFormView(FormView):
form_class = Register

success_url = "/accounts/login/"

template_name = "registration/register.html"


def form_valid(self, form):
    form.save()
    return super(MyRegisterFormView, self).form_valid(form)

def form_invalid(self, form):
    return super(MyRegisterFormView, self).form_invalid(form)

这怎么实现?

if User.objects.filter(email=email).exists():
     messages.error(request, "Эта почта уже зарегестрированна")

我知道您需要将电子邮件与过滤器进行比较,如果匹配,则返回错误,但是我无法实现。如何访问视图中的电子邮件表单字段?

1 个答案:

答案 0 :(得分:0)

有两种处理方法。

在模型中

如果每个用户需要使用唯一的电子邮件,则可以在用户模型的电子邮件字段中添加unique=True更加容易。该验证将自动应用于您使用的表单。

形式

您可以通过向注册表单中添加clean_email方法来添加字段验证(see Django docs here),

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

  def clean_email(self):
    email = self.cleaned_data.get('email', '')
    if User.objects.filter(email=email).exists():
      messages.error(request, "Эта почта уже зарегестрированна")

  class Meta:
    model = User
    fields = ['username', 'email', 'password1', 'password2']