Flask Button ejecutar Python sin actualizar la página?

Me estoy iniciando en Python y Frask (para la raspberry pi). Quiero una aplicación web que ejecute algún código de Python para panoramizar e inclinar una cámara y mostrar un flujo de video.

Mi código hasta ahora para el matraz es:

from flask import Flask, render_template import time import serial #ser = serial.Serial('/dev/ttyUSB0',9600) app = Flask(__name__) @app.route('/') @app.route('/') #each button in my html redirects to a specified directory def execute(cmd=None): if cmd == "down": print "Moving Down" #ser.write("D") if cmd == "up": print "Moving Up" #ser.write("U") if cmd == "left": print "Moving Left" # ser.write("L") if cmd == "right": print "Moving Right" #ser.write("R") if cmd == "reset": print "Reseting.." #ser.write("X") return render_template("main.html") if __name__ == "__main__": app.run(host='0.0.0.0', port=8080, debug=True) 

El problema es que mi código se basa en que cada botón redirige a una nueva dirección, mientras que esto funciona bien, actualiza la página cada vez, lo que significa que mi video incrustado se recarga y almacena de nuevo. ¿Hay una mejor manera de detectar un botón presionando y luego ejecutando el código de Python usando el matraz?

Lo dividiría en dos rutas para que sea más fácil ver lo que tienes que hacer:

 LEFT, RIGHT, UP, DOWN, RESET = "left", "right", "up", "down", "reset" AVAILABLE_COMMANDS = { 'Left': LEFT, 'Right': RIGHT, 'Up': UP, 'Down': DOWN, 'Reset': RESET } @app.route('/') def execute(): return render_template('main.html', commands=AVAILABLE_COMMANDS) @app.route('/') def command(cmd=None): if cmd == RESET: camera_command = "X" response = "Resetting ..." else: camera_command = cmd[0].upper() response = "Moving {}".format(cmd.capitalize()) # ser.write(camera_command) return response, 200, {'Content-Type': 'text/plain'} 

Luego, en su plantilla, solo necesita usar un poco de JavaScript para enviar la solicitud:

 {# in main.html #} {% for label, command in commands.items() %}  {% endfor %} {# and then elsewhere #}  

Tengo el mismo problema, y ​​la respuesta es simple utilizando ajax XmlHttpRequest:

 // send a request, but don't refresh page xhttp = new XMLHttpRequest(); xhttp.open("GET", "your script action", true); xhttp.send(); 

Aquí hay un pequeño ejemplo, llamando al script actual con parámetros “me gusta”, incrustado en una función:

 function likeStuffs() { // send a request, but don't refresh page xhttp = new XMLHttpRequest(); xhttp.open("GET", "?like", true); xhttp.send(); } 

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.