2017-03-04 3048 views
2

我是python和Flask的新手。 我有一個按鈕的Flask Web App。當我點擊按鈕時,我想執行一個python方法而不是Javascript方法。我怎樣才能做到這一點?Flask - 在按鈕OnClick事件上調用python函數

我已經看到了蟒蛇的例子在那裏使用表單標籤這樣

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

重定向我到一個新的頁面,但我不希望它給我重定向到一個新的一頁。我只是想讓它執行python方法。 我正在爲一個樹莓派機器人車。當我按下前進按鈕時,我希望它運行方法以向前轉動輪子。

按鈕HTML代碼(的index.html

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

簡單app.py碼 - 這裏位於

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

我看到#2類似的問題,以我的move_forward()方法,但他們似乎不回答我的問題,或者我無法理解答案。如果有人可以請給我一個簡單的方法來調用一個按鈕點擊事件的Python方法,將不勝感激。

,我看着其他問題: - Python Flask calling functions using buttons

-

Calling a python function with a button

- Flask Button run Python without refreshing page?

+0

我希望你已經解決了這個問題(根據你刪除了[你的問題](https://stackoverflow.com/questions/47361134))。我的觀點是你的輸入形狀是'(120,320,3)',但是你要用形狀爲'n x 1'的數組(或者任何你的'batchSize')給模型餵食。 – 2017-11-18 00:40:07

回答

4

這聽起來像你想用這個Web應用程序的遠程控制你的機器人,而一個核心問題是你不會希望每次你執行一個動作時都要重新加載一個頁面,在這種情況下,你發佈的最後一個鏈接回答你的問題。

我想你可能會誤解一些關於Flask的東西。首先,你不能在一條路線中嵌套多個功能。你沒有爲一個特定的路由提供一組函數,你定義了一個特定的事情,服務器將在該路由被調用時執行。

考慮到這一點,你就可以改變你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', message=forward_message); 

然後在你的HTML,使用此:

<form action="/forward/" method="post"> 
    <button name="forwardBtn" type="submit">Forward</button> 
</form> 

...執行您的前進代碼。而包括此:

{{ forward_message }} 

...你想要的前進消息出現在您的模板。

這將導致您的頁面重新加載,這是不可避免的,無需使用AJAX和Javascript。