Пример #1
0
def reenviar_email_confirmacion(request, usuario_id):
    # Se determina el usuario al que hay que volver a enviar el email de confirmación
    usuario = Usuario.objects.get(id=usuario_id)

    # Se llama al proceso que envía el mail
    Email.enviar_correo_registro_usuario(usuario=usuario)

    # Se recarga la página donde se encuentra el usuario
    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Пример #2
0
def login_view(request):
    if request.user.is_authenticated():
        return redirect('website:index')

    if request.method == 'POST':
        # Caso en que el POST venga del formulario de Login de usuario
        if 'login' in request.POST:  # Esto debe aparecer en el name del submit
            login_form = Login_Form(request.POST)
            register_form = Registro_Usuario()
            if login_form.is_valid():
                username = login_form.cleaned_data['username']
                password = login_form.cleaned_data['password']

                # Comprueba que existe un usuario con ese username o con ese email
                if User.objects.filter(username=username):
                    user = authenticate(username=username, password=password)
                elif User.objects.filter(email=username):
                    usuario = User.objects.get(email=username)
                    user = authenticate(username=usuario.username,
                                        password=password)
                else:
                    # Si no existe ningún usuario registrado con un username o un email igual al valor pasado por el usuario, user = None
                    user = None

                # Realiza las acciones correspondientes si se ha encontrado un usuario con las credenciales adquiridas
                if user:
                    # Comprueba que el usuario no está desactivado
                    if user.is_active:
                        # Realiza el login del usuario
                        login(request, user)
                        # Redirecciona a la página que se desee
                        return redirect('/index/')
                    else:
                        class_alert = 'alert alert-danger'
                        message = 'Este usuario se encuentra inactivo'
                        login_form = Login_Form(request.POST)
                else:
                    class_alert = 'alert alert-danger'
                    message = 'El usuario o password introducido es incorrecto'
                    login_form = Login_Form(request.POST)
            else:
                class_alert = 'alert alert-danger'
                message = 'Hay errores en el formulario'
                login_form = Login_Form(request.POST)

        # Caso en que el POST venga del formulario de Registro de nuevo usuario
        elif 'register' in request.POST:  # Esto debe aparecer en el name del submit
            register_form = Registro_Usuario(request.POST)
            login_form = Login_Form()
            if register_form.is_valid():
                username = register_form.cleaned_data['username']
                email = register_form.cleaned_data['email']
                password = register_form.cleaned_data['password']
                password2 = register_form.cleaned_data['password2']

                # Comprueba que el username no exista en la BD
                if register_form.check_username(username):
                    # Comprueba que el email no exista en la BD
                    if register_form.check_email(email):
                        # Comprueba que los dos passwords introducidos coinciden
                        if register_form.check_password(password, password2):
                            # Crea el nuevo usuario
                            user_model = User.objects.create(
                                username=username,
                                email=email,
                            )

                            # Se le asigna el password
                            user_model.set_password(password)
                            user_model.save()

                            # Intentamos determinar el País a partir de la IP para añadir el dato en la creación del Usuario
                            pais, provincia = None, None
                            if 'user_data' in request.session:
                                user_data = request.session['user_data']
                                if 'country_code' in user_data:
                                    country_code = user_data['country_code']
                                    if Pais.objects.filter(
                                            codigo_iso_alfa2__exact=country_code
                                    ):
                                        pais = Pais.objects.get(
                                            codigo_iso_alfa2=country_code)
                                    else:
                                        pais = None
                                if 'region_name' in user_data:
                                    provincia_name = user_data['region_name']
                                    provincia = Provincia.get_provincia_from_name(
                                        provincia_name)

                            # Crea el objeto Usuario asociado al Usuario creado.
                            n_usuario = Usuario.nuevo_usuario(
                                user=user_model,
                                raw_password=password,
                                pais=pais,
                                provincia=provincia,
                            )

                            # Se envía el email con el link de Activación del Usuario
                            # 1 - Se crea el Email de Registro de Usuario
                            Email.enviar_correo_registro_usuario(
                                n_usuario, request.get_host())

                            # Se define el mensaje a mostrar en la página
                            # TODO: Definir mensaje a mostrar en el Index que indique al usuario que se ha creado la cuenta y que se ha enviado un mail para su validación

                            # Realiza el login del usuario
                            # login(request, user_model)

                            # Se definen los parámetros a pasar en el template
                            context = {
                                'login_form': Login_Form(),
                                'register_form': Registro_Usuario(),
                            }

                            # Se añade el mensaje de acción exitosa
                            context['class_alert'] = 'alert alert-success'
                            context[
                                'message'] = 'Hemos enviado un email con un enlcace de confirmación a la dirección que nos ha indicado. Por favor, siga las instrucciones para poder validar su cuenta'

                            # Se renderiza el template con la información correspondiente
                            context.update(custom_context(request))
                            return render(request, 'usuarios/login.html',
                                          context)

                        else:
                            class_alert = 'alert alert-danger'
                            message = 'Las contraseñas no coinciden'
                            register_form = Registro_Usuario(request.POST)
                    else:
                        class_alert = 'alert alert-danger'
                        message = 'Ya existe un usuario registrado con este E-Mail'
                        register_form = Registro_Usuario(request.POST)
                else:
                    class_alert = 'alert alert-danger'
                    message = 'Ya existe un usuario registrado con este username(%s)' % (
                        username)
                    register_form = Registro_Usuario(request.POST)
            else:
                class_alert = 'alert alert-danger'
                message = 'El formulario de registro contiene errores'
                register_form = Registro_Usuario(request.POST)

        else:
            print(
                'Se ha recibido un POST que no viene ni de Login ni de Registro'
            )
            class_alert = None
            message = None
            login_form = Login_Form()
            register_form = Registro_Usuario()
    else:
        class_alert = None
        message = None
        login_form = Login_Form()
        register_form = Registro_Usuario()

    # Se definen los parámetros a pasar en el template
    context = {
        'login_form': login_form,
        'register_form': register_form,
    }

    # Se añade un mensaje si es necesario
    if class_alert and message:
        context['class_alert'] = class_alert
        context['message'] = message

    # Se renderiza el template con la información correspondiente
    context.update(custom_context(request))
    return render(request, 'usuarios/login.html', context)