Tengo el siguiente código en mi secuencia de comandos de Python:
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)
Además, tengo un formulario HTML en init.html:
<form>
<input type="text" id="projectFilepath" size="40" placeholder="Spot your project files">
<input type="button" id="spotButton" value="Spot">
</form>
¿Cómo puedo pasar la entrada del usuario de "projectFilepath" cuando un usuario hace clic en "spotButton" en una variable en mi script de Python?
Soy nuevo en Python y Flask, así que perdóname si cometo algún error.
projectFilepath
entrada debe tener unname
atributo establecido, luego puede acceder al valor enrequest.args.value_of_name
(orequest.form.value_of_name
si realiza unaPOST
solicitud.id
atributo en la<input>
etiqueta, mientras que las respuestas a continuación usanname
.name
es lo que quieres, ya que eso es lo que aparece como claves enrequest.form
.Respuestas:
La
form
etiqueta necesita algunos atributos establecidos:action
: La URL a la que se envían los datos del formulario al enviarlos. Generarlo conurl_for
. Se puede omitir si la misma URL maneja mostrar el formulario y procesar los datos.method="post"
: Envía los datos como datos de formulario con el método POST. Si no se proporciona, o se establece explícitamente enget
, los datos se envían en la cadena de consulta (request.args
) con el método GET en su lugar.enctype="multipart/form-data"
: Cuando el formulario contiene entradas de archivo, debe tener esta codificación establecida; de lo contrario, los archivos no se cargarán y Flask no los verá.La
input
etiqueta necesita unname
parámetro.Agregue una vista para manejar los datos enviados, que está
request.form
bajo la misma clave que la entradaname
. Cualquier entrada de archivo estará en formatorequest.files
.@app.route('/handle_data', methods=['POST']) def handle_data(): projectpath = request.form['projectFilepath'] # your code # return a response
Establezca el formulario
action
en la URL de esa vista usandourl_for
:<form action="{{ url_for('handle_data') }}" method="post"> <input type="text" name="projectFilepath"> <input type="submit"> </form>
fuente
method
es en realidad opcional, por defectoGET
. De lo contrario, estás en el clavo.from flask import Flask, request
request.form.get('projectFilepath')
lugar derequest.form['projectFilepath']
evitar obtener una excepción si se envía un valor nulo.url_for
busca la función con ese nombre, por lo que aquí debe nombrarse su vistahandle_data
Necesita una vista de matraz que recibirá datos POST y un formulario HTML que los enviará.
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>
fuente