Фляга - вызов функции Python на событие кнопки onclick функции

Я новичок в Python и Flask. У меня есть фляга веб-приложение с кнопкой. Когда я нажимаю на кнопку, Я хочу, чтобы выполнить метод в Python не метод JavaScript. Как я могу это сделать?

Я видел примеры с Python, где он перенаправляет меня на новую страницу с помощью тега form, как это

<form action="/newPage" method="post">

но я Дон'т хотите, чтобы перенаправить меня на новую страницу. Я просто хочу, чтобы выполнить метод в Python. Я делаю это для малина автомобиль робот Пи. Когда я нажимаю кнопку вперед, я хочу, чтобы запустить метод, чтобы повернуть колеса вперед.

Кнопка HTML код (index.html)

<button name="forwardBtn" onclick="move_forward()">Forward</button>

простой код app.py - move_forward() метод находится здесь

#### 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...")

Я видел подобные вопросы на сайте StackOverflow, но они не'т, кажется, чтобы ответить на мой вопрос или я не могу понять ответ. Если кто-то может предоставить мне простой способ, чтобы вызвать метод Python на событие нажатия кнопки, она будет принята с благодарностью.

Другие вопросы, которые я посмотрел:

--https://stackoverflow.com/questions/30899484/python-flask-calling-functions-using-buttons

--https://stackoverflow.com/questions/40583347/calling-a-python-function-with-a-button

--https://stackoverflow.com/questions/21566649/flask-button-run-python-without-refreshing-page

Комментарии к вопросу (1)

Вы можете просто сделать это с помощью Аякса... Вот пример, который вызывает функцию на Python, которая печатает Hello без перенаправления или обновить страницу.

В app.py поставить ниже фрагмент кода.

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

И вашу страницу json.html должен выглядеть как показано ниже.

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

            <a href=# id=test>Test</a>


</div>

Здесь при нажатии на кнопку Тест простой в консоли вы можете увидеть"Привет&quot&; отображается без каких-либо освежающего.

Комментарии (0)

Это звучит, как вы хотите использовать это приложение в качестве пульта дистанционного управления для вашего робота, и один из основных вопросов заключается в том, что вы выиграли'т хотите перезагрузки страницы каждый раз, когда вы совершаете действие, в этом случае, в последней ссылке, размещенной ответ на ваш проблема.

Я думаю, вы может быть непонимание несколько вещей, о склянке. Например, вы можете'т вложить несколько функций в одном маршруте. Вы'повторно не делая набор функций, доступный для конкретного маршрута, вы'вновь определение что сервер будет делать, когда этот маршрут называется.

Имея это в виду, вы могли бы решить вашу проблему с помощью перезагрузки страницы, изменяя свои app.py больше похожи на это:

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);

Затем в HTML, используйте это:


    Forward

...Для выполнения вашего продвижения вперед код. И включают этот:

{{ forward_message }} 

... где вы хотите, чтобы двигаться вперед сообщение появится на вашем шаблоне.

Это вызовет страницу, чтобы перезагрузить, что неизбежно без использования AJAX и JavaScript.

Комментарии (1)

index.html (index.html должен быть в папке templates)





    The jQuery Example

    <h2>jQuery-AJAX in FLASK. Execute function on button click</h2>  

    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"> </script>
    <script type=text/javascript> $(function() { $("#mybutton").click(function (event) { $.getJSON('/SomeFunction', { },
    function(data) { }); return false; }); }); </script> 



        <input type = "button" id = "mybutton" value = "Click Here" />


test.py

from flask import Flask, jsonify, render_template, request
app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/SomeFunction')
def SomeFunction():
    print('In SomeFunction')
    return "Nothing"

if __name__ == '__main__':
   app.run()
Комментарии (0)