¿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.
🤔 ¿Qué vamos a aprender?
🎯 Al terminar este tutorial sabrás:
📦 ¿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:
- 🎨 Frontend: El botón cambia de color
- 🧠 Backend Python: Guarda en la base de datos que te gustó esa publicación
⚠️ 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:
http://127.0.0.1:5000/- Página principalhttp://127.0.0.1:5000/sobre-mi- Página sobre tihttp://127.0.0.1:5000/api/datos- Tu primera API
🗄️ 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)
✅ ¿Qué has conseguido?
🏆 Felicidades, ahora sabes:
💪 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 DELETEDomina 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 HTTPAprende a consumir tu API desde el frontend