Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Formularios de búsqueda Python: Desarrollo web con Flask

¿Te has preguntado cómo buscar recetas o productos en una página? Vamos a construir ese sistema juntos, usando formularios HTML y un poco de código del lado del servidor


¿Qué es un formulario HTML?

El formulario (<form>) es una herramienta que usamos para recoger datos desde una página web y enviarlos a un servidor, generalmente para hacer algo con esa información.

Pero hoy lo vamos a usar para buscar o filtrar contenido, sin modificar nada.

Un ejemplo real: en RecetasGratis.net puedes buscar recetas usando una barra como esta:

📎 Enlace: Recetas de cocina

Y así se implementa en HTML algo parecido:

<form action="/buscar-recetas" method="get">
  <input type="search" required name="q" placeholder="¿Qué quieres cocinar hoy?">
</form>

Estructura de un formulario

Vamos a ver qué significa cada parte:

Elemento Explicación
<form> Es el contenedor de todo el formulario
action="/buscar-recetas" A dónde se envían los datos cuando se hace la búsqueda
method="get" El tipo de solicitud. Con get, los datos van en la URL
<input type="search"> Campo de texto optimizado para búsquedas
name="q" Nombre del campo. Así se accede al valor en el servidor
required Obliga al usuario a llenar el campo antes de enviarlo

Métodos de envío: GET vs POST

Cuando defines un formulario, debes decirle cómo enviar los datos:

  • get: Envía los datos como parte de la URL. Ideal para búsquedas y filtros porque puedes compartir el enlace.
  • post: Envía los datos "por dentro", como si los escondiera. Se usa cuando se crean o modifican datos, como cuando alguien se registra.

En el ejemplo de búsqueda, usamos get porque no estamos cambiando nada, solo consultando.

Por ejemplo:
Si escribes "arepas" y envías el formulario con get, el navegador irá a esta URL:

/buscar-recetas?q=arepas

Esa URL puede compartirse, guardar en favoritos, etc.


Tipos de campos de formulario (<input>)

El elemento <input> es súper versátil. Dependiendo del atributo type, puede comportarse de distintas formas. Aquí te dejo una tabla con algunos:

Tipo de campo Qué hace
text Texto libre
search Similar al text, pero optimizado para búsquedas
email Campo para correo electrónico
password Oculta los caracteres
checkbox Casilla de verificación (selección múltiple)
radio Botones de opción (solo uno a la vez)
submit Botón que envía la información del formulario
tel Teléfono
range Deslizador con rango de valores

Atributos importantes y cómo se usan

Todos los campos en un formulario (excepto los botones) deben tener el atributo name, porque con ese nombre vamos a acceder a la información en el servidor.

<form action="/buscar-recetas" method="get">
  <input type="search" name="q" required>
</form>

Si alguien busca “tacos de carne”, el servidor recibe:

q=tacos%20de%20carne

¿Qué hace el servidor con esos datos?

Imagínate que tienes un sitio de recetas. El formulario manda la palabra clave, y el servidor filtra las recetas que la contienen.

En Python con Flask podría verse así:

@app.route('/buscar-recetas')
def buscar():
    q = request.args.get('q')
    recetas_filtradas = filtrar_por_nombre(q)
    return render_template('resultados.html', recetas=recetas_filtradas, busqueda=q)

Mantener el campo de búsqueda con el último valor

Buena práctica: mostrar lo que la persona escribió, así puede refinar su búsqueda sin empezar de cero.

Paso 1: enviar el valor al template

return render_template('resultados.html', recetas=recetas_filtradas, busqueda=q)

Paso 2: usar ese valor en el campo

<form action="/buscar-recetas" method="get">
  <input type="search" name="q" value="{{ busqueda }}">
  <input type="submit" value="Buscar">
</form>

De esta forma, cuando se recargue la página con los resultados, el campo seguirá mostrando lo que la persona escribió antes.


Resumen

  • Los formularios HTML permiten enviar datos desde la web al servidor.
  • Los formularios de búsqueda usan get y permiten compartir los resultados con una URL.
  • <form> es el contenedor principal, y cada campo usa name para identificar sus datos.
  • required ayuda a validar campos antes de enviarlos.
  • En el servidor, puedes usar la palabra clave enviada para mostrar solo los resultados que coincidan.
  • Mostrar el valor anterior en el campo de búsqueda mejora mucho la experiencia de quien usa la web.

Trabajo independiente

  1. Crea una plantilla para mostrar usuarios en templates/users/index.html.
  2. Agrega al archivo example.py el siguiente diccionario.
users = [
    {'id': 1, 'name': 'mike'},
    {'id': 2, 'name': 'mishel'},
    {'id': 3, 'name': 'adel'},
    {'id': 4, 'name': 'keks'},
    {'id': 5, 'name': 'kamila'}
]
  1. Configura el manejador de la ruta /users y muestra los nombres de los usuarios del arreglo en la página /users.
  2. Implementa en la página /users un formulario de búsqueda, donde se pueda ingresar parte del nombre del usuario para buscarlo. El formulario debe enviarse a la misma página.
  3. Ajusta el manejador /users para que realice el filtrado de los nombres.
  4. Prueba filtrar usuarios. La búsqueda mi debe devolver tres nombres: mike, mishel y kamila.

image_processing_2.png

image_processing_3.png

Aplicación de referencia

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY