50% OFF Plus
--:--:--
¡Obtener!

Parámetros y query strings

Intermedio
Flask
Flask
Actualizado: 20/06/2025

¡Desbloquea el curso de Flask completo!

IA
Ejercicios
Certificado
Entrar

Mira la lección en vídeo

Accede al vídeo completo de esta lección y a más contenido exclusivo con el Plan Plus.

Desbloquear Plan Plus

request.args para query strings

Los query strings son parámetros que se envían a través de la URL después del símbolo ?, permitiendo que los clientes pasen información adicional a nuestros endpoints. En Flask, el objeto request.args nos proporciona acceso directo a estos parámetros de manera sencilla y eficiente.

Acceso básico a query strings

Flask almacena todos los parámetros de consulta en request.args, que funciona como un diccionario especial llamado ImmutableMultiDict. Para acceder a estos parámetros, primero debemos importar el objeto request:

from flask import Flask, request

app = Flask(__name__)

@app.route('/productos')
def obtener_productos():
    categoria = request.args.get('categoria')
    return f"Productos de la categoría: {categoria}"

Con esta ruta, una petición a /productos?categoria=electronica devolvería "Productos de la categoría: electronica".

Métodos de acceso a parámetros

El objeto request.args ofrece varios métodos para recuperar parámetros según nuestras necesidades:

Método get() con valores por defecto:

@app.route('/buscar')
def buscar_productos():
    termino = request.args.get('q', 'todos')
    limite = request.args.get('limite', '10')
    
    return {
        'termino_busqueda': termino,
        'limite_resultados': limite
    }

Acceso directo con corchetes:

@app.route('/usuario')
def obtener_usuario():
    try:
        user_id = request.args['id']
        return f"Usuario ID: {user_id}"
    except KeyError:
        return "ID de usuario requerido", 400

Conversión de tipos de datos

Los query strings siempre llegan como cadenas de texto, pero Flask nos permite convertirlos fácilmente a otros tipos usando el parámetro type:

@app.route('/paginar')
def paginar_resultados():
    pagina = request.args.get('pagina', 1, type=int)
    por_pagina = request.args.get('por_pagina', 20, type=int)
    
    inicio = (pagina - 1) * por_pagina
    fin = inicio + por_pagina
    
    return {
        'pagina_actual': pagina,
        'elementos_por_pagina': por_pagina,
        'rango': f"{inicio}-{fin}"
    }

Conversión a tipos booleanos:

@app.route('/articulos')
def listar_articulos():
    incluir_archivados = request.args.get('archivados', False, type=bool)
    ordenar_desc = request.args.get('desc', False, type=bool)
    
    return {
        'incluye_archivados': incluir_archivados,
        'orden_descendente': ordenar_desc
    }

Manejo de múltiples valores

Algunos parámetros pueden aparecer múltiples veces en la URL. Flask maneja esto automáticamente:

@app.route('/filtrar')
def filtrar_productos():
    # URL: /filtrar?tag=oferta&tag=nuevo&tag=destacado
    tags = request.args.getlist('tag')
    colores = request.args.getlist('color')
    
    return {
        'tags_seleccionados': tags,
        'colores_disponibles': colores,
        'total_filtros': len(tags) + len(colores)
    }

Ejemplo práctico con datos en memoria

Guarda tu progreso

Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

Más de 25.000 desarrolladores ya confían en CertiDevs

Veamos un ejemplo completo que simula una API de productos usando datos almacenados en memoria:

from flask import Flask, request, jsonify

app = Flask(__name__)

# Datos de ejemplo en memoria
productos = [
    {'id': 1, 'nombre': 'Laptop Gaming', 'categoria': 'electronica', 'precio': 1200, 'stock': 5},
    {'id': 2, 'nombre': 'Mouse Inalámbrico', 'categoria': 'electronica', 'precio': 25, 'stock': 50},
    {'id': 3, 'nombre': 'Escritorio Madera', 'categoria': 'muebles', 'precio': 300, 'stock': 8},
    {'id': 4, 'nombre': 'Silla Ergonómica', 'categoria': 'muebles', 'precio': 150, 'stock': 12}
]

@app.route('/api/productos')
def obtener_productos():
    # Parámetros de filtrado
    categoria = request.args.get('categoria')
    precio_min = request.args.get('precio_min', type=int)
    precio_max = request.args.get('precio_max', type=int)
    
    # Parámetros de paginación
    pagina = request.args.get('pagina', 1, type=int)
    limite = request.args.get('limite', 10, type=int)
    
    # Filtrar productos
    productos_filtrados = productos.copy()
    
    if categoria:
        productos_filtrados = [p for p in productos_filtrados if p['categoria'] == categoria]
    
    if precio_min:
        productos_filtrados = [p for p in productos_filtrados if p['precio'] >= precio_min]
    
    if precio_max:
        productos_filtrados = [p for p in productos_filtrados if p['precio'] <= precio_max]
    
    # Aplicar paginación
    inicio = (pagina - 1) * limite
    fin = inicio + limite
    productos_paginados = productos_filtrados[inicio:fin]
    
    return jsonify({
        'productos': productos_paginados,
        'total': len(productos_filtrados),
        'pagina': pagina,
        'limite': limite,
        'filtros_aplicados': {
            'categoria': categoria,
            'precio_min': precio_min,
            'precio_max': precio_max
        }
    })

Verificación de parámetros existentes

Para comprobar si un parámetro específico está presente en la URL, podemos usar el operador in:

@app.route('/configuracion')
def obtener_configuracion():
    config = {'modo': 'basico'}
    
    if 'debug' in request.args:
        config['debug'] = request.args.get('debug', type=bool)
    
    if 'formato' in request.args:
        formato = request.args.get('formato')
        if formato in ['json', 'xml', 'csv']:
            config['formato_salida'] = formato
    
    return config

Esta aproximación nos permite crear endpoints flexibles que respondan de manera diferente según los parámetros proporcionados, manteniendo la funcionalidad básica cuando no se especifican parámetros adicionales.

Aprendizajes de esta lección de Flask

  • Comprender qué son los query strings y cómo se utilizan en Flask.
  • Aprender a acceder a parámetros de consulta usando request.args.
  • Conocer métodos para obtener parámetros con valores por defecto y manejo de errores.
  • Saber convertir parámetros de cadena a otros tipos de datos como enteros y booleanos.
  • Implementar filtrado, paginación y manejo de múltiples valores en endpoints RESTful.

Completa este curso de Flask y certifícate

Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.

Asistente IA

Resuelve dudas al instante

Ejercicios

Practica con proyectos reales

Certificados

Valida tus conocimientos

Más de 25.000 desarrolladores ya se han certificado con CertiDevs

⭐⭐⭐⭐⭐
4.9/5 valoración