Flask Button运行Python而无需刷新页面?

我刚开始使用python和flask(对于树莓派)。我想要一个Web应用程序,该应用程序将执行一些python代码来平移和倾斜摄像机并显示视频流。

到目前为止,我的flask代码是:

from flask import Flask, render_template

import time

import serial

#ser = serial.Serial('/dev/ttyUSB0',9600)

app = Flask(__name__)

@app.route('/')

@app.route('/<cmd>') #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)

问题是我的代码依赖于重定向到新目录的每个按钮,尽管效果很好,但是每次刷新页面都会刷新,这意味着我的嵌入式视频会重新加载和缓冲。有没有更好的方法来检测按下按钮,然后使用flask执行python代码?

回答:

我将其分为两条路线,以使你更轻松地了解所要做的事情:

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('/<cmd>')

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'}

然后,在模板中,你只需要使用一些JavaScript发送请求即可:

{# in main.html #}

{% for label, command in commands.items() %}

<button class="command command-{{ command }}" value="{{ command }}">

{{ label }}

</button>

{% endfor %}

{# and then elsewhere #}

<script>

// Only run what comes next *after* the page has loaded

addEventListener("DOMContentLoaded", function() {

// Grab all of the elements with a class of command

// (which all of the buttons we just created have)

var commandButtons = document.querySelectorAll(".command");

for (var i=0, l=commandButtons.length; i<l; i++) {

var button = commandButtons[i];

// For each button, listen for the "click" event

button.addEventListener("click", function(e) {

// When a click happens, stop the button

// from submitting our form (if we have one)

e.preventDefault();

var clickedButton = e.target;

var command = clickedButton.value;

// Now we need to send the data to our server

// without reloading the page - this is the domain of

// AJAX (Asynchronous JavaScript And XML)

// We will create a new request object

// and set up a handler for the response

var request = new XMLHttpRequest();

request.onload = function() {

// We could do more interesting things with the response

// or, we could ignore it entirely

alert(request.responseText);

};

// We point the request at the appropriate command

request.open("GET", "/" + command, true);

// and then we send it off

request.send();

});

}

}, true);

</script>

以上是 Flask Button运行Python而无需刷新页面? 的全部内容, 来源链接: utcz.com/qa/431422.html

回到顶部