Django-регистрация — как проверить, существует ли электронная почта в базе данных

#django-views #django-forms

#django-просмотры #django-forms

Вопрос:

Во время регистрации в настоящее время, когда пользователь вводит существующее имя пользователя и адрес электронной почты, он получает уведомление о том, что это имя пользователя уже существует в базе данных. Когда пользователь вводит другое имя пользователя, но существующее электронное письмо, пользователь успешно создается в БД. Итак, я хочу проверить, существует ли электронная почта в базе данных. По этой причине я создал следующее, но, к сожалению, оно работает не так, как ожидалось (пользователь создается, если существует тот же адрес электронной почты).

forms.py файл

 from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django import forms


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

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

def clean_email(self):
    # Get the email
    email = self.cleaned_data.get('email')
    if User.objects.filter(email__iexact=email).exists():
        raise forms.ValidationError("User with that email already exists")
    return email
  

views.py файл

 from django.shortcuts import render
from django.contrib.messages.views import SuccessMessageMixin
from django.views import generic
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy


from .forms import SignupForm


class UserRegisterView(SuccessMessageMixin, generic.CreateView):
    form_class = SignupForm
    template_name = 'registration/register.html'
    success_url = reverse_lazy('login')
    success_message = "Hello %(username)s! Your account has been created"
  

Спасибо за ваше время.

Комментарии:

1. clean_email Отступ должен быть таким, чтобы он был частью SignupForm .

2. Спасибо, Виллем Ван Онсем, как вы поняли, я новичок в Django.

Ответ №1:

Потому что вы взяли электронную почту как dictinobary <объект ‘dict’ не вызывается> так, как список. Он работает над моим проектом

email = self.cleaned_data.get[’email’]

 def clean_email(self):
    # Get the email
    email = self.cleaned_data.get['email']
    if User.objects.filter(email__iexact=email).exists():
        raise forms.ValidationError("User with that email already exists")
    return email