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

Servidor web incorporado Python: Desarrollo web con Flask

Ya llevas un buen camino con Python, así que vas a ver algo nuevo y muy útil: cómo crear un servidor web básico usando solo Python puro, sin instalar herramientas externas. Para esto vamos a usar un módulo llamado wsgiref, que viene incluido en la biblioteca estándar de Python.

Más adelante, en proyectos reales, otras herramientas como Gunicorn o uWSGI son más comunes, pero con wsgiref tenemos suficiente para entender cómo funciona todo desde cero.


¿Qué es WSGI?

Antes de empezar, hablemos un momento de qué es WSGI.

WSGI (Web Server Gateway Interface). Es una especificación que permite que aplicaciones web escritas en Python puedan comunicarse con un servidor web.

Piensa en WSGI como un puente entre el servidor (que recibe las peticiones del navegador) y tu código Python (que responde esas peticiones).


Paso 1: Crear la aplicación web

Primero vamos a escribir un archivo llamado example.py. Este será nuestro "programa web", es decir, el código que será ejecutado cada vez que el navegador haga una solicitud.

Contenido de example.py

from datetime import datetime

# Esta es nuestra aplicación WSGI
def app(environ, start_response):
    time = datetime.now()  # Obtenemos la hora actual
    data = bytes(f'The time is {time:%H:%M:%S}', 'utf-8')  # Convertimos a bytes

    # Le decimos al servidor que todo salió bien (200 OK)
    start_response("200 OK", [
        ("Content-Type", "text/plain"),  # Tipo de contenido: texto plano
        ("Content-Length", str(len(data)))  # Tamaño de la respuesta
    ])

    return [data]  # Devolvemos la respuesta

¿Qué hace este código?

  • Define la función app, que es la interfaz entre el servidor y tu aplicación.
  • Usa el módulo datetime para conseguir la hora actual.
  • Devuelve un mensaje con ese dato como respuesta HTTP.

Paso 2: Crear el servidor

Ahora vamos a configurar el servidor que usará esa aplicación. Crea otro archivo llamado server.py.

Contenido de server.py

from wsgiref.simple_server import make_server
from example import app  # Importamos la aplicación que creamos

def server(wsgi_app):
    # Creamos el servidor en el puerto 8000 (localhost por defecto)
    serverd = make_server('', 8000, wsgi_app)
    print("Serving HTTP on port 8000...")
    serverd.serve_forever()  # El servidor queda "esperando" solicitudes

if __name__ == '__main__':
    server(app)

Al ejecutar este archivo, se levantará el servidor web en el puerto 8000 y quedará esperando peticiones.


Paso 3: Ejecutar el servidor

Para levantar el servidor, abre una terminal y ejecuta:

python3 server.py

Verás algo como:

Serving HTTP on port 8000...

Mientras el servidor esté corriendo, la terminal no responderá a otros comandos, porque está "ocupada" procesando solicitudes. Para detenerlo, puedes presionar Ctrl+C.


Paso 4: Probar la aplicación

Abre tu navegador y visita esta dirección:

http://localhost:8000

Ahí deberías ver algo como:

The time is 15:42:36

Cada vez que recargues, te mostrará la hora actualizada.

En la terminal, verás una línea por cada solicitud recibida, como esta:

127.0.0.1 - - [08/Sep/2022 14:08:39] "GET / HTTP/1.1" 200 20

Problemas comunes

❌ Si intentas abrir otro servidor en el mismo puerto (por ejemplo, en otra pestaña de la terminal), verás un error como este:

OSError: [Errno 98] Address already in use

Esto significa que el puerto 8000 ya está ocupado. Puedes:

  • Detener el servidor con Ctrl+C
  • O usar otro puerto disponible (por ejemplo, 8001)

Para saber qué proceso está usando el puerto 8000, puedes ejecutar este comando en la terminal:

ss -ltnup 'sport = :8000'

Hacer cambios en caliente

Supongamos que ahora quieres mostrar no solo la hora, sino también la fecha. Puedes modificar example.py así:

data = bytes(f'The time is {time:%b %d %H:%M:%S}', 'utf-8')

Pero, cuando actualizas la página en el navegador, no verás los cambios. ¿Por qué?

Porque el servidor solo carga tu aplicación una vez, cuando arranca. Para que los cambios se reflejen, debes detener el servidor y volver a iniciarlo.

Algunos frameworks como Flask o Django incluyen un "dev server" que se reinicia automáticamente; pero este no. Más adelante veremos cómo usar esas herramientas.


Comparación con servidores reales

Herramienta ¿Viene con Python? Uso recomendado
wsgiref Educación, pruebas
Gunicorn No Aplicaciones reales
uWSGI No Escenarios avanzados

Los grandes servidores como Gunicorn y uWSGI permiten ejecutar tu código como "demonios", es decir, procesos que corren en segundo plano incluso cuando cierras la terminal.


Resumen

  • wsgiref es una herramienta de Python puro para crear servidores web básicos.
  • Definimos una aplicación WSGI como una función que recibe environ y start_response.
  • Usamos make_server para crear el servidor y .serve_forever() para dejarlo corriendo.
  • Cada vez que el navegador visita http://localhost:8000, el servidor ejecuta la función de nuestra app.
  • Para ver cambios en el código, debemos reiniciar el servidor.
  • En producción, se usan servidores más potentes como Gunicorn o uWSGI.
  • Si el puerto está ocupado, el servidor no podrá iniciarse.

Este es un paso clave para entender cómo funcionan las aplicaciones web por "debajo del capó". Más adelante, vas a ver cómo frameworks como Flask te facilitan mucho todo esto, pero entender lo básico te dará muchas ventajas.


Trabajo independiente

  1. Repite todos los pasos de esta lección

Materiales adicionales

  1. Servidor web incorporado
  2. Demonio

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