es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Comprueba si el correo electrónico ya existe en la base de datos.

En mi aplicación de cuenta de Django quiero comprobar si el correo electrónico introducido existe en la base de datos (básica de Django db.sqlite3).

forms.py:

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

class UserRegistrationForm(forms.ModelForm):

password = forms.CharField(label='Contraseña', widget=forms.PasswordInput)
password2 = forms.CharField(label='Repetir contraseña', widget=forms.PasswordInput)
email = forms.CharField(label='Correo electrónico')

class Meta:
    model = User
    fields = ('username', 'first_name')

def clean_password2(self):
    cd = self.cleaned_data

    if cd['password'] != cd['password2']:
        raise forms.ValidationError('Las contraseñas no coinciden.')

    return cd['password2']

def clean_email(self):
    cd = self.cleaned_data
    email = cd.get('email')

    if User.objects.filter(email=email).count() > 0:
        raise forms.ValidationError('El correo electrónico ya está registrado.')

    return email

views.py:

def register(request):
    if request.method == "POST":
        user_form = UserRegistrationForm(request.POST)

    if user_form.is_valid():
        # Creating new user object, without saving in database
        new_user = user_form.save(commit=False)

        # Setting new password
        new_user.set_password(
            user_form.cleaned_data['password'])

        # Saving user object
        new_user.save()

        return render(request,
                      'account/register_done.html',
                      {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()

    return render(request,
                  'account/register.html',
                  {'user_form': user_form})

Ahora, cuando ingreso el mismo correo electrónico para otro usuario, el formulario crea ese usuario.

Creo que es posible hacerlo de la siguiente manera:
1). Hacer del correo electrónico una variable como contraseña y repetir contraseña
2). Eliminar el correo electrónico de meta
3). Crear un método clean_email () que compruebe si el correo electrónico existe en la base de datos, si no, genere un error

No sé cómo obtener los correos electrónicos en la base de datos.

¡Gracias por toda la ayuda!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible hacerlo de la manera que sugeriste. Para obtener los correos electrónicos en la base de datos, puedes utilizar el método User.objects.filter(). Por ejemplo:


    def clean_email(self):
        cd = self.cleaned_data
        if User.objects.filter(email=cd['email']).exists():
            raise forms.ValidationError('El correo electrónico ya existe.')
        return cd['email']

Comments are closed.