Как я могу установить уникальную регистрацию почты в моем проекте Django? - PullRequest
0 голосов
/ 02 мая 2019

Я тестировал свой вид регистрации и заметил, что если я попытаюсь зарегистрироваться, используя существующее имя пользователя alreaxy, я получу сообщение об ошибке;если я попытаюсь зарегистрироваться, используя уже существующее письмо, приложение позволит мне сделать это.

Очевидно, я не хочу, чтобы кто-то регистрировал несколько аккаунтов с одним и тем же письмом на моем сайте.Я довольно новичок в Django, и, так как я заметил, что форма проверила, если имя пользователя уже существует, я подумал, что он будет делать то же самое с полем электронной почты.

Я действительно не знаю, как перейти отчто, я должен работать на мой взгляд или на форме?И как я могу сделать это через мою БД и найти, если электронная почта уже была зарегистрирована?Я думал, что 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

Ответы [ 2 ]

1 голос
/ 03 мая 2019

Сравните адрес электронной почты с адресом электронной почты в модели пользователя.

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

0 голосов

Я думаю, что лучшей альтернативой является программирование вашей собственной модели пользователя, это позволит вам добавить уникальное ограничение на электронную почту. Вы можете взглянуть на документацию

...