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

Sesión HTTP (solicitud y respuesta) Python: Desarrollo web con Flask

En Flask, todo gira en torno a solicitudes (requests) y respuestas (responses).

Cuando visitas un sitio web, tu navegador envía un request y el servidor responde con un response. Vamos a ver cómo funcionan estos elementos clave y cómo usarlos en nuestras aplicaciones.


¿Qué es el objeto request?

El objeto request representa todo lo que llega del cliente (por ejemplo, del navegador). Esto incluye la URL, los parámetros, las cabeceras (headers), e incluso los formularios que se envían desde una página web.

Este objeto se puede usar dentro de cualquier función que maneje una ruta.

from flask import request

@app.route('/')
def home():
    print(request.headers)  # Muestra las cabeceras del navegador
    return 'Hola, mundo'

Cuando probamos esto con curl o en el navegador, Flask imprime las cabeceras que llegan con la petición. Por ejemplo, puede mostrar cuál navegador se usó o qué formatos acepta recibir.

💡 Request es "de solo lectura", es decir, no se puede modificar.

¿Y qué es response?

Cuando tu aplicación devuelve una respuesta, Flask automáticamente transforma lo devuelto en un objeto de respuesta. Eso significa que puedes devolver un texto, un HTML, un diccionario (se convierte en JSON) ¡y Flask se encarga del resto!

@app.route('/json/')
def retorna_json():
    return {'resultado': 42}  # Flask devuelve esto como JSON

@app.route('/html/')
def retorna_html():
    return "<h1>¡Hola mundo!</h1>"  # Formato HTML

También puedes devolver una tupla con el contenido y el código HTTP que quieres indicar, como por ejemplo un 404 (No encontrado):

@app.route('/no_encontrado')
def error_404():
    return 'No se encontró la página', 404

Así, si haces un GET a esa ruta, verás que el navegador (o curl) entiende que es un error 404.


Manejo de errores con @app.errorhandler

En Flask, puedes personalizar cómo responder a errores como el 404 de manera centralizada, sin necesidad de detectar todos los errores a mano. Se hace con decoradores especiales:

@app.errorhandler(404)
def pagina_no_encontrada(error):
    return 'Página no encontrada', 404

Cada vez que el usuario visita una ruta que no existe, se activa este manejador.


Crear un response personalizado

Aunque Flask se encarga de crear el response, hay ocasiones donde necesitas más control: como cambiar cabeceras, el tipo de contenido, o incluso agregar cookies.

Para eso usamos make_response():

from flask import make_response

@app.route('/saludo')
def saludo():
    # Creamos un response manualmente
    response = make_response('Hola, mundo')
    response.headers['X-Personalizado'] = 'Mi cabecera'
    response.mimetype = 'text/plain'  # Tipo de contenido
    response.status_code = 201  # Estado HTTP: creado
    response.set_cookie('mi-cookie', '42')  # Guardamos una cookie
    return response

Una respuesta como esta puede tener todos los elementos personalizados que necesitemos.


Parámetros de consulta (Query String)

Los parámetros de consulta son los que van en la URL después del signo de interrogación (?). Se usan para enviar información adicional, como filtros de búsqueda, número de página, etc.

Por ejemplo:

curl 'localhost:8000/usuarios?page=2&por_pagina=5'

Para obtener esos datos usamos request.args:

@app.route('/usuarios')
def get_usuarios():
    page = request.args.get('page', default=1, type=int)
    per_page = request.args.get('por_pagina', default=10, type=int)

    print(f"Página solicitada: {page}, elementos por página: {per_page}")

    # Supongamos que tenemos una lista de usuarios
    usuarios = ['Ana', 'Luis', 'Pedro', 'María', 'Carlos', 'Juan', 'Laura']

    comienzo = (page - 1) * per_page
    fin = page * per_page
    usuarios_pagina = usuarios[comienzo:fin]

    return {'usuarios': usuarios_pagina}

¿Qué hace request.args.get()?

  • Busca un cierto parámetro (page o por_pagina).
  • Si no lo encuentra, usa el valor por defecto (default=1, por ejemplo).
  • Si se indica un type (como int), intenta convertir el valor a ese tipo. Si no se puede, lanza un error.

Diferencias entre request y response

Request Response
Representa la solicitud del cliente Representa la respuesta que enviamos
Se accede a través de request Se devuelve directamente o con make_response
Contiene cabeceras, parámetros, etc. Contiene cuerpo, estado, cabeceras, cookies

Resumen

  • El objeto request te permite acceder a todo lo que ha enviado el cliente: parámetros, cabeceras, formularios, etc.
  • El objeto response se genera automáticamente con los datos que devuelves en la ruta, pero también puedes construirlo manualmente con make_response.
  • Puedes personalizar respuestas con códigos de estado, tipos MIME, cookies y cabeceras.
  • Los parámetros en la URL (query strings) se obtienen con request.args.
  • Usa @app.errorhandler para manejar errores como el 404 de forma centralizada.

Esta parte de Flask es clave si estás construyendo APIs o páginas que deben adaptarse a distintos datos del cliente.


Trabajo independiente

  1. Cambie en example.py el siguiente manejador:
 @app.post('/users')
 def users():
     return 'Users', 302
  1. Haga una solicitud POST a esta ruta usando curl. Asegúrese de que se haya producido una redirección:
# Reemplace con sus propios parámetros
# --head – muestra los encabezados
# -X POST – envía una solicitud POST
curl --head -X POST localhost:8000/users

Aplicación de referencia


Materiales adicionales

  1. Request
  2. Response

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