Flask - Düğme OnClick olayında python işlevini çağırma
Python ve Flask'ta yeniyim. Bir düğme ile bir Flask Web Uygulamam var. Düğmeye tıkladığımda bir Javascript yöntemi değil bir python yöntemi çalıştırmak istiyorum. Bunu nasıl yapabilirim?
Python ile aşağıdaki gibi bir form etiketi kullanarak beni yeni bir sayfaya yönlendirdiği örnekler gördüm
<form action="/newPage" method="post">
ama beni yeni bir sayfaya yönlendirmesini istemiyorum. Sadece python yöntemini çalıştırmasını istiyorum. Bunu bir Raspberry Pi robot arabası için yapıyorum. İleri düğmesine bastığımda, tekerlekleri ileri çevirmek için yöntemi çalıştırmasını istiyorum.
Düğme HTML Kodu (index.html)
<button name="forwardBtn" onclick="move_forward()">Forward</button>
basit app.py Kodu - move_forward() yöntemi burada bulunur
#### 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'da benimkine benzer sorular gördüm, ancak soruma cevap vermiyorlar ya da cevabı anlayamıyorum. Birisi bana düğme tıklama olayında bir Python yöntemini çağırmanın basit bir yolunu sağlayabilirse, çok takdir edilecektir.
Baktığım Diğer Sorular:
--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
Bunu AJAX yardımıyla basitçe yapabilirsiniz... İşte sayfayı yeniden yönlendirmeden veya yenilemeden merhaba yazdıran bir python işlevini çağıran bir örnek.
app.py dosyasına aşağıdaki kod parçasını yerleştirin.
Ve json.html sayfanız aşağıdaki gibi görünmelidir.
Burada Test simple düğmesine bastığınızda konsolda "Hello" görebilirsiniz; herhangi bir yenileme olmadan görüntüleniyor.
Bu web uygulamasını robotunuz için bir uzaktan kumanda olarak kullanmak istiyorsunuz gibi görünüyor ve temel bir sorun, her eylem gerçekleştirdiğinizde sayfanın yeniden yüklenmesini istememenizdir, bu durumda gönderdiğiniz son bağlantı sorununuzu yanıtlar.
Sanırım Flask ile ilgili birkaç şeyi yanlış anlıyor olabilirsiniz. Birincisi, tek bir rotaya birden fazla fonksiyon yerleştiremezsiniz. Belirli bir rota için bir dizi işlevi kullanılabilir hale getirmiyorsunuz, bu rota çağrıldığında sunucunun yapacağı belirli bir şeyi tanımlıyorsunuz.
Bunu göz önünde bulundurarak, app.py dosyanızı aşağıdaki gibi değiştirerek sayfanın yeniden yüklenmesi ile ilgili sorununuzu çözebilirsiniz:
Sonra html'nizde şunu kullanın:
...İlerleme kodunuzu çalıştırmak için. Ve bunu ekleyin:
... ileriye taşıma mesajının şablonunuzda görünmesini istediğiniz yer.
Bu, AJAX ve Javascript kullanmadan kaçınılmaz olan sayfanızın yeniden yüklenmesine neden olacaktır.
index.html (index.html templates klasöründe olmalıdır)
test.py