Flask: función de Python de llamada en el evento OnClick del botón

Soy nuevo en python y matraz. Tengo una aplicación web de 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 en los que me redirige a una nueva página utilizando una etiqueta de formulario como esta

 

pero no quiero que me redirija a una nueva página. Solo quiero que ejecute el método python. Estoy haciendo esto para un robot 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 )

  

Código de 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 parece que no responden a mi pregunta o no puedo entender la respuesta. Si alguien me pudiera proporcionar una forma sencilla de llamar a un método de Python en el evento de clic de botón, se lo agradecería mucho.

Otras preguntas que he visto:

– Funciones de llamada de Python Flask usando botones

– Llamar a una función python con un botón

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

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 coloca debajo el 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 tu página json.html debería verse a continuación.

   //button 

Test

Aquí, cuando presiona el botón Prueba simple en la consola, puede ver que se muestra “Hola” sin ninguna actualización.

Parece que desea utilizar esta aplicación web como control remoto para su robot, y un problema central es que no querrá que se vuelva a cargar la página 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á haciendo un conjunto de funciones disponibles para una ruta en particular, está definiendo una cosa específica que hará el servidor cuando se llame a esa ruta.

Teniendo eso en cuenta, 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', message=forward_message); 

Luego en tu html, usa esto:

 

… 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 que es inevitable sin utilizar AJAX y Javascript.