Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.5K
Vistas
Frasco: función de llamada de Python en el evento OnClick del botón

Soy nuevo en Python y Flask. Tengo una aplicación web Flask con un botón. Cuando hago clic en el botón, me gustaría ejecutar un método de Python, no un método de Javascript. ¿Cómo puedo hacer esto?

He visto ejemplos con python donde me redirige a una nueva página usando una etiqueta de formulario como esta

 <form action="/newPage" method="post">

pero no quiero que me redirija a una nueva página. Solo quiero que ejecute el método python. Estoy haciendo esto para un auto robot Raspberry Pi . Cuando presiono el botón de avance, quiero que ejecute el método para girar las ruedas hacia adelante.

Código HTML del botón ( index.html )

 <button name="forwardBtn" onclick="move_forward()">Forward</button>

Código app.py simple - método move_forward() ubicado aquí

 #### App.py code from flask import Flask, render_template, Response, request, redirect, url_for app = Flask(__name__) @app.route("/") def index(): return render_template('index.html'); def move_forward(): #Moving forward code print("Moving Forward...")

He visto preguntas similares a las mías en Stackoverflow, pero no parecen responder a mi pregunta o no puedo entender la respuesta. Si alguien pudiera proporcionarme una forma sencilla de llamar a un método de Python en un evento de clic de botón, sería muy apreciado.

Otras preguntas que he mirado:

--Funciones de llamada de Python Flask usando botones

-- Llamar a una función de python con un botón

-- Flask Button ejecuta Python sin actualizar la página?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Simplemente puede hacer esto con la ayuda de AJAX... Aquí hay un ejemplo que llama a una función de python que imprime hola sin redirigir o actualizar la página.

En app.py, coloque debajo del segmento de código.

 #rendering the HTML page which has the button @app.route('/json') def json(): return render_template('json.html') #background process happening without any refreshing @app.route('/background_process_test') def background_process_test(): print ("Hello") return ("nothing")

Y su página json.html debería verse como a continuación.

 <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type=text/javascript> $(function() { $('a#test').on('click', function(e) { e.preventDefault() $.getJSON('/background_process_test', function(data) { //do nothing }); return false; }); }); </script> //button <div class='container'> <h3>Test</h3> <form> <a href=# id=test><button class='btn btn-default'>Test</button></a> </form> </div>

Aquí, cuando presiona el botón Prueba simple en la consola, puede ver que se muestra "Hola" sin actualizarse.

over 4 years ago · Santiago Trujillo Denunciar

0

Parece que desea usar esta aplicación web como un control remoto para su robot, y un problema central es que no querrá que una página se vuelva a cargar cada vez que realice una acción, en cuyo caso, el último enlace que publicó responde a su problema.

Creo que puede estar malinterpretando algunas cosas sobre Flask. Por un lado, no puede anidar múltiples funciones en una sola ruta. No está poniendo a disposición un conjunto de funciones para una ruta en particular, está definiendo la única cosa específica que hará el servidor cuando se llame a esa ruta.

Con eso en mente, podría resolver su problema con una recarga de página cambiando su app.py para que se parezca más a esto:

 from flask import Flask, render_template, Response, request, redirect, url_for app = Flask(__name__) @app.route("/") def index(): return render_template('index.html') @app.route("/forward/", methods=['POST']) def move_forward(): #Moving forward code forward_message = "Moving Forward..." return render_template('index.html', forward_message=forward_message);

Luego, en tu html, usa esto:

 <form action="/forward/" method="post"> <button name="forwardBtn" type="submit">Forward</button> </form>

... Para ejecutar su código de avance. E incluye esto:

 {{ forward_message }}

... donde desea que aparezca el mensaje de avance en su plantilla.

Esto hará que su página se vuelva a cargar, lo cual es inevitable sin usar AJAX y Javascript.

over 4 years ago · Santiago Trujillo Denunciar

0

La solución más fácil

 <button type="button" onclick="window.location.href='{{ url_for( 'move_forward') }}';">Forward</button>
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda