Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

1.5K
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!