Flask Button run Python without refreshing page? Flask Button run Python without refreshing page? flask flask

Flask Button run Python without refreshing page?


I would split it out into two routes to make it easier to see what you have to do:

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

Then in your template you just need to use some JavaScript to send off the request:

{# 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 loadedaddEventListener("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>


I've got the same problem, and the answer is simple using ajax XmlHttpRequest:

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

Here's a small example, calling current script with parameters "like", embedded in a function:

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


You can simply do this with help of AJAX... Here is a example which calls a python function which prints hello without redirecting or refreshing the page.

In app.py put below code segment.

//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"

And your json.html page should look like below.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script><script type=text/javascript>        $(function() {          $('a#test').bind('click', function() {            $.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>

Here when you press the button Test simple in the console you can see "Hello" is displaying without any refreshing.