Flask - ボタンの OnClick イベントで python の関数を呼び出す
私はpythonとFlaskの初心者です。 私はボタンとFlask Web Appを持っています。私がボタンをクリックすると、私はJavascriptのメソッドではなく、Pythonのメソッドを実行したいと思います。どのように私はこれを行うことができますか?
Python を使って、次のようなフォームタグを使った新しいページにリダイレクトさせる例を見たことがあります。
<form action="/newPage" method="post">
しかし、私は新しいページにリダイレクトさせたくはないのです。ただ、Pythonのメソッドを実行させたいだけです。 私はRaspberry Piのロボットカーのためにこれを作っています。前進ボタンを押すと、車輪を前進させるメソッドを実行させたいのです。
ボタンHTMLコード (index.html)
<button name="forwardBtn" onclick="move_forward()">Forward</button>
simple 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
AJAXの助けを借りれば、簡単にできますよ。 ここでは、ページをリダイレクトしたり更新したりせずに、helloを表示するpython関数を呼び出す例を示します。
app.pyに以下のコードを記述してください。
そして、json.htmlのページは以下のようになるはずです。
ここで、Test simpleというボタンを押すと、コンソールに"Hello".と表示されます。 がリフレッシュされることなく表示されています。
このWebアプリケーションをロボットのリモコンとして使用したいようですが、核となる問題は、アクションを実行するたびにページを再読み込みしたくないということです。
Flaskについて、いくつか誤解されているようですね。 1つは、1つのルートに複数の関数をネストすることはできません。 特定のルートで利用可能な関数のセットを作るのではなく、そのルートが呼び出されたときにサーバーが行う特定の1つのことを定義しているのです。
これを踏まえて、app.pyを以下のように変更すれば、ページの再読み込みの問題を解決することができます。
そして、htmlの中で、これを使います。
...前進するコードを実行します。 そして、これを含めます。
... テンプレート上の前進するメッセージを表示させたい場所。
この場合、AJAXやJavascriptを使用しないと避けられない、ページの再読み込みが発生します。
index.html (templates フォルダにあるはずです。)
test.py