Python Backend para Principiantes: Tu Primer Servidor Web

Aprende Python backend desde cero y crea tu primer servidor web con Flask, conecta bases de datos y despliega tu primera API

¿Quieres aprender Python para backend pero todos los tutoriales te confunden con teoría innecesaria? Te entiendo perfectamente.

En este tutorial vas a crear tu primer servidor web con Python que realmente funciona. Nada de conceptos abstractos - al final tendrás un servidor corriendo en tu computadora que puedes mostrar a tus amigos.

15min Tu primer servidor funcionando
100% Código funcionando garantizado

🤔 ¿Qué vamos a aprender?

🎯 Al terminar este tutorial sabrás:

Qué es Python backend y por qué usarlo
Instalar Python y Flask desde cero
Crear tu primer servidor web
Manejar rutas y respuestas
Conectar una base de datos simple
Crear tu primera API REST

📦 ¿Qué es Python Backend?

Python backend es usar Python para crear la lógica del servidor - la parte que los usuarios no ven pero que hace que todo funcione.

💡 Piénsalo así:

  • Frontend: La interfaz bonita que ves (botones, colores, menús)
  • Backend: El cerebro que procesa datos, guarda información, toma decisiones

Por ejemplo, cuando haces clic en "Me gusta" en una red social:

⚠️ Requisitos (léelos bien)

🛡️ Antes de empezar necesitas:

  • Conocimientos básicos de programación (variables, condicionales, bucles)
  • Python instalado (te enseño cómo verificarlo)
  • Un editor de código (VS Code recomendado)
  • 15 minutos sin interrupciones

🔍 Paso 1: Verificar que Python está instalado

Primero necesitamos verificar si tienes Python instalado. Abre tu terminal (en Windows: Símbolo del sistema, en Mac/Linux: Terminal) y escribe:

# En terminal/símbolo del sistema
python --version

Si ves algo como "Python 3.9.7" o similar, ¡perfecto! Si no, ve a python.org y descarga la versión más reciente.

💪 Consejo pro:

En algunos sistemas necesitas usar python3 en lugar de python. Si python --version no funciona, prueba python3 --version

📝 Paso 2: Instalar Flask

Flask es un framework (conjunto de herramientas) que hace súper fácil crear servidores web con Python. Instálalo así:

# En tu terminal
pip install flask==3.1.2

❌ Si te da error:

Prueba con pip3 install flask==3.1.2 o python -m pip install flask==3.1.2

🚀 Paso 3: Tu primer servidor web

Crea un archivo llamado app.py en tu carpeta de trabajo y escribe esto:

# app.py - Tu primer servidor Python
from flask import Flask

# Crear la aplicación Flask
app = Flask(__name__)

# Ruta principal - cuando alguien visite tu servidor
@app.route('/')
def inicio():
    return "¡Hola mundo! Mi primer servidor Python funciona 🐍"

# Ejecutar el servidor
if __name__ == '__main__':
    app.run(debug=True)

Ahora ejecuta tu servidor:

# En terminal, dentro de la carpeta donde está app.py
python app.py

¡Felicidades! Abre tu navegador y ve a http://127.0.0.1:5000 - verás tu mensaje funcionando.

🎉 ¿Funcionó?

Si ves tu mensaje en el navegador, ¡acabas de crear tu primer servidor web! Para detenerlo presiona Ctrl+C en la terminal.

🛣️ Paso 4: Añadir más rutas

Un servidor real tiene múltiples páginas. Vamos a añadir más rutas a nuestro app.py:

from flask import Flask, jsonify

app = Flask(__name__)

# Página principal
@app.route('/')
def inicio():
    return "¡Bienvenido a mi servidor Python! 🐍"

# Página "acerca de"
@app.route('/sobre-mi')
def sobre_mi():
    return "Soy un desarrollador Python principiante 💻"

# API que devuelve datos JSON
@app.route('/api/datos')
def obtener_datos():
    datos = {
        "mensaje": "¡Mi primera API funciona!",
        "usuario": "Estudiante Python",
        "nivel": "Principiante"
    }
    return jsonify(datos)

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

Reinicia tu servidor y prueba estas URLs:

3 Rutas funcionando
1 API REST creada

🗄️ Paso 5: Conectar una base de datos simple

Los servidores reales guardan datos. Vamos a usar SQLite (viene incluido con Python) para crear una base de datos:

from flask import Flask, jsonify, request
import sqlite3

app = Flask(__name__)

# Crear base de datos y tabla
def inicializar_db():
    conn = sqlite3.connect('mi_app.db')
    cursor = conn.cursor()
    
    # Crear tabla de usuarios
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS usuarios (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            nombre TEXT NOT NULL,
            email TEXT NOT NULL
        )
    ''')
    
    conn.commit()
    conn.close()

# Página principal
@app.route('/')
def inicio():
    return "¡Servidor con base de datos funcionando! 🗄️"

# API para obtener todos los usuarios
@app.route('/api/usuarios', methods=['GET'])
def obtener_usuarios():
    conn = sqlite3.connect('mi_app.db')
    cursor = conn.cursor()
    
    cursor.execute('SELECT * FROM usuarios')
    usuarios = cursor.fetchall()
    
    conn.close()
    
    # Convertir a formato JSON
    usuarios_json = []
    for usuario in usuarios:
        usuarios_json.append({
            'id': usuario[0],
            'nombre': usuario[1],
            'email': usuario[2]
        })
    
    return jsonify(usuarios_json)

# API para crear un usuario
@app.route('/api/usuarios', methods=['POST'])
def crear_usuario():
    datos = request.get_json()
    
    conn = sqlite3.connect('mi_app.db')
    cursor = conn.cursor()
    
    cursor.execute(
        'INSERT INTO usuarios (nombre, email) VALUES (?, ?)',
        (datos['nombre'], datos['email'])
    )
    
    conn.commit()
    conn.close()
    
    return jsonify({'mensaje': 'Usuario creado correctamente'})

if __name__ == '__main__':
    inicializar_db()  # Crear DB antes de ejecutar
    app.run(debug=True)

🎯 ¿Qué hace este código?

  • inicializar_db(): Crea una base de datos y tabla de usuarios
  • GET /api/usuarios: Muestra todos los usuarios
  • POST /api/usuarios: Añade un nuevo usuario

🧪 Paso 6: Probar tu API

Reinicia tu servidor y prueba tu API. Para ver usuarios:

# Ve a tu navegador:
http://127.0.0.1:5000/api/usuarios

Para crear un usuario, necesitas una herramienta como Postman o puedes usar curl en terminal:

# En otra terminal (deja el servidor corriendo)
curl -X POST -H "Content-Type: application/json" \
     -d '{"nombre":"Juan Pérez","email":"juan@email.com"}' \
     http://127.0.0.1:5000/api/usuarios

❌ Si curl no funciona:

Descarga Postman - es una herramienta gráfica para probar APIs. Mucho más fácil para principiantes.

🏆 Proyecto completo: Sistema de tareas

Vamos a crear un sistema completo para manejar tareas (como un TODO list):

from flask import Flask, jsonify, request
import sqlite3
from datetime import datetime

app = Flask(__name__)

def inicializar_db():
    conn = sqlite3.connect('tareas.db')
    cursor = conn.cursor()
    
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS tareas (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            titulo TEXT NOT NULL,
            descripcion TEXT,
            completada BOOLEAN DEFAULT FALSE,
            fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    ''')
    
    conn.commit()
    conn.close()

# Página principal con instrucciones
@app.route('/')
def inicio():
    return '''
    

🐍 Mi Sistema de Tareas en Python

API Endpoints disponibles:

  • GET /api/tareas - Ver todas las tareas
  • POST /api/tareas - Crear nueva tarea
  • PUT /api/tareas/ID - Marcar tarea como completada
  • DELETE /api/tareas/ID - Eliminar tarea

¡Tu primer backend Python funciona! 🎉

'''
# Obtener todas las tareas @app.route('/api/tareas', methods=['GET']) def obtener_tareas(): conn = sqlite3.connect('tareas.db') cursor = conn.cursor() cursor.execute('SELECT * FROM tareas ORDER BY fecha_creacion DESC') tareas = cursor.fetchall() conn.close() tareas_json = [] for tarea in tareas: tareas_json.append({ 'id': tarea[0], 'titulo': tarea[1], 'descripcion': tarea[2], 'completada': bool(tarea[3]), 'fecha_creacion': tarea[4] }) return jsonify(tareas_json) # Crear nueva tarea @app.route('/api/tareas', methods=['POST']) def crear_tarea(): datos = request.get_json() conn = sqlite3.connect('tareas.db') cursor = conn.cursor() cursor.execute( 'INSERT INTO tareas (titulo, descripcion) VALUES (?, ?)', (datos['titulo'], datos.get('descripcion', '')) ) conn.commit() conn.close() return jsonify({'mensaje': 'Tarea creada correctamente'}) # Marcar tarea como completada @app.route('/api/tareas/<int:tarea_id>', methods=['PUT']) def completar_tarea(tarea_id): conn = sqlite3.connect('tareas.db') cursor = conn.cursor() cursor.execute( 'UPDATE tareas SET completada = TRUE WHERE id = ?', (tarea_id,) ) conn.commit() conn.close() return jsonify({'mensaje': 'Tarea completada'}) if __name__ == '__main__': inicializar_db() app.run(debug=True)
GET Obtener tareas
POST Crear tarea
PUT Completar tarea
SQLite Base de datos

✅ ¿Qué has conseguido?

🏆 Felicidades, ahora sabes:

Crear servidores web con Python y Flask
Manejar múltiples rutas y métodos HTTP
Conectar y operar con bases de datos SQLite
Crear APIs REST completas
Manejar JSON y respuestas HTTP
Estructurar aplicaciones backend reales

💪 Buenas prácticas que debes recordar

✅ SIEMPRE haz esto:

  • debug=True: Solo en desarrollo, nunca en producción
  • Cierra conexiones: Siempre usa conn.close() después de usar la DB
  • Valida datos: Comprueba que los datos existen antes de usarlos
  • Manejo de errores: Usa try/except para errores de base de datos

❌ NUNCA hagas esto:

  • SQL Injection: No concatenes strings para hacer consultas SQL
  • Passwords en código: Nunca hardcodees contraseñas
  • Debug en producción: Siempre debug=False en servidores reales

🚀 ¿Qué sigue después?

¡Has creado tu primer backend en Python! Aquí tienes los próximos pasos para seguir mejorando:

🎯 Próximos pasos recomendados:

1. Aprende autenticación: Añadir login y registro de usuarios

👉 SQL básico para principiantes: INSERT, SELECT, UPDATE y DELETE

Domina las bases de datos para crear aplicaciones más robustas

🔗 Conecta con frontend:

2. Integra con JavaScript: Conecta tu API con una interfaz web

👉 JavaScript Fetch API para principiantes: Tu primera llamada HTTP

Aprende a consumir tu API desde el frontend