Manejar formularios en Python usando el framework Flask

En este tutorial, aprenderemos cómo manejar formularios en Python utilizando el framework Flask. Flask es un microframework ligero que facilita la creación de aplicaciones web en Python.

Instalación de Flask

Primero, debemos instalar Flask. Puedes hacerlo usando pip:

pip install Flask

Creación de un formulario simple

Crearemos una aplicación Flask que maneje un formulario simple con un campo de texto y un botón de envío.

1. Configuración del proyecto

Crea un archivo llamado app.py y agrega el siguiente código:

from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        name = request.form.get('name')
        return f'Hola, {name}!'
    return render_template('index.html')

if __name__ == '__main__':
    app.run(debug=True)
    

2. Crear la plantilla HTML

Crea una carpeta llamada templates en el mismo directorio que app.py y dentro de ella, crea un archivo llamado index.html con el siguiente contenido:




    
    
    Formulario en Flask


    

Formulario en Flask

Ejecutar la aplicación

Para ejecutar la aplicación, abre una terminal y navega al directorio donde se encuentra app.py. Luego, ejecuta el siguiente comando:

python app.py

Abre tu navegador web y ve a http://127.0.0.1:5000/. Deberías ver el formulario y poder enviar tu nombre para recibir una respuesta personalizada.

Validación de formularios

Para validar formularios, podemos usar la extensión Flask-WTF. Instálala usando pip:

pip install Flask-WTF

1. Configurar Flask-WTF

Modifica tu archivo app.py para incluir la validación de formularios:

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

app = Flask(__name__)
app.secret_key = 'supersecretkey'

class NameForm(FlaskForm):
    name = StringField('Nombre', validators=[DataRequired()])
    submit = SubmitField('Enviar')

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        name = form.name.data
        return f'Hola, {name}!'
    return render_template('index.html', form=form)

if __name__ == '__main__':
    app.run(debug=True)
    

2. Modificar la plantilla HTML

Actualiza index.html para utilizar Flask-WTF:




    
    
    Formulario en Flask


    

Formulario en Flask

{{ form.hidden_tag() }}

{{ form.name.label }}
{{ form.name(size=32) }}
{% for error in form.name.errors %} [{{ error }}] {% endfor %}

{{ form.submit() }}