Ich habe den folgenden Code in meinem Python-Skript:
def cmd_wui(argv, path_to_tx):
"""Run a web UI."""
from flask import Flask, flash, jsonify, render_template, request
import webbrowser
app = Flask(__name__)
@app.route('/tx/index/')
def index():
"""Load start page where you select your project folder
or load history projects from local DB."""
from txclib import get_version
txc_version = get_version()
prj = project.Project(path_to_tx)
# Let's create a resource list from our config file
res_list = []
prev_proj = ''
for idx, res in enumerate(prj.get_resource_list()):
hostname = prj.get_resource_host(res)
username, password = prj.getset_host_credentials(hostname)
return render_template('init.html', txc_version=txc_version, username=username)
Außerdem habe ich ein HTML-Formular in init.html:
<form>
<input type="text" id="projectFilepath" size="40" placeholder="Spot your project files">
<input type="button" id="spotButton" value="Spot">
</form>
Wie kann ich die Benutzereingabe von "projectFilepath" übergeben, wenn ein Benutzer auf "spotButton" für eine Variable in meinem Python-Skript klickt?
Ich bin neu in Python und Flask, also vergib mir, wenn ich Fehler mache.
projectFilepath
Eingabe muss eine habenname
Attribut - Set - dann können Sie den Wert in zugreifenrequest.args.value_of_name
(oderrequest.form.value_of_name
wenn eine tunPOST
Anfrage.id
Attribut auf dem<input>
Tag verwenden, während die folgenden Antworten verwendenname
.name
ist das, was Sie wollen, denn das kommt als Schlüssel hereinrequest.form
.Antworten:
Für das
form
Tag müssen zwei Attribute festgelegt werden:action
: Die URL, an die die Formulardaten beim Senden gesendet werden. Generieren Sie es miturl_for
. Es kann weggelassen werden, wenn dieselbe URL das Formular anzeigt und die Daten verarbeitet.method
: Gibt an, ob die Daten als Abfragezeichenfolge (GET) oder als Formulardaten (POST) gesendet werden sollen.Das
input
Tag benötigt einenname
Parameter.Fügen Sie eine Ansicht hinzu, um die übermittelten Daten zu verarbeiten, die sich
request.form
unter demselben Schlüssel wie die Eingaben befindenname
.@app.route('/handle_data', methods=['POST']) def handle_data(): projectpath = request.form['projectFilepath'] # your code # return a response
Stellen Sie die Formulare
action
auf die URL dieser Ansicht ein, indem Sie Folgendes verwendenurl_for
:<form action="{{ url_for('handle_data') }}" method="post"> <input type="text" name="projectFilepath"> <input type="submit"> </form>
quelle
method
ist eigentlich optional - standardmäßigGET
. Ansonsten sind Sie genau richtig.from flask import Flask, request
request.form.get('projectFilepath')
anstattrequest.form['projectFilepath']
zu vermeiden, dass eine Ausnahme angezeigt wird, wenn ein Nullwert gesendet wird.url_for
nach der Funktion mit diesem Namen zuhandle_data
Sie benötigen eine Flask-Ansicht, die POST-Daten empfängt, und ein HTML-Formular, das diese sendet.
from flask import request @app.route('/addRegion', methods=['POST']) def addRegion(): ... return (request.form['projectFilePath'])
<form action="{{ url_for('addRegion') }}" method="post"> Project file path: <input type="text" name="projectFilePath"><br> <input type="submit" value="Submit"> </form>
quelle