R

ReflexKR

Documentación de Reflex

Desarrollo web full stack con Python y Reflex

·

Resumen del curso

1

Conoce Reflex y prepara tu entorno

2

Dibujar la pantalla con componentes

3

State y Vars: que los datos dibujen la pantalla

4

Eventos y formularios: añadir clientes

5

Transformar datos y gráficos

6

Resumen, depuración y próximos pasos

·

Apéndice

Desarrollo web full stack con Python y Reflex
Lección 1

Tiempo 0:00–0:35

Conoce Reflex y prepara tu entorno

Al terminar esta lección tendrás la app básica de Reflex funcionando en el navegador y podrás explicar en una frase cómo convierte Reflex tu código Python en una aplicación web.

1-1. ¿Qué es Reflex? (10 min)

Una aplicación web suele dividirse en dos partes:

  • Frontend: la interfaz que se ejecuta en el navegador. Normalmente se hace con HTML, CSS y JavaScript (React, por ejemplo).
  • Backend: la lógica y los datos que se ejecutan en el servidor. Se hace con Python (Django, FastAPI), entre otros.

Lo habitual es tener que aprender ambos lenguajes y, además, diseñar una API entre los dos. Reflex es un framework full stack que te permite escribir tanto el frontend como el backend en Python.

Funciona en tres pasos:

  1. Compilación: al arrancar la app, las funciones de Python que construyen la pantalla (los componentes) se ejecutan una sola vez y se convierten en código React. El resultado se guarda en la carpeta .web/.
  2. El estado vive en el servidor: los datos (State) y las funciones que gestionan los eventos se ejecutan en Python, en el servidor.
  3. Sincronización por WebSocket: al pulsar un botón, el navegador envía un evento al servidor, el servidor devuelve solo el estado que ha cambiado y la pantalla se vuelve a dibujar automáticamente.
Arquitectura de Reflex · una compilación, y los eventos van y vuelven por WebSocket

El único archivo Python de la izquierda se divide en dos caminos. Las funciones de pantalla se compilan a React y van al navegador; el State se queda en el servidor y se sincroniza con la pantalla mediante el ida y vuelta ②→③.

Nota para el instructor — Estos tres pasos aparecen una y otra vez durante el curso. Resúmelos en una frase, "las funciones de pantalla se ejecutan una vez; las de eventos, cada vez", y recupérala en la lección 3 cuando expliques por qué no se puede usar if.

1-2. Preparar el entorno de desarrollo (10 min)

Instalar uv: uv es una herramienta que gestiona a la vez la versión de Python, el entorno virtual y los paquetes.

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

Comprobar Node.js: Reflex usa Node.js o Bun para instalar y ejecutar los paquetes de la parte visual (React). Reflex 0.10 requiere Node 22.22.0 o superior.

node -v   # debe ser v22.22.0 o superior

1-3. Crear y ejecutar el proyecto (10 min)

uv init tutorial_261019        # crea un proyecto de Python
cd tutorial_261019
uv add reflex                  # instala reflex (queda registrado en pyproject.toml)
uv run reflex init             # genera el esqueleto de la app Reflex (elige una plantilla)
uv run reflex run              # arranca el servidor de desarrollo
  • uv run ejecuta el comando dentro del entorno virtual del proyecto (.venv). No hace falta activar el entorno virtual por separado.
  • reflex init te pide que elijas una plantilla. Si quieres empezar con una app vacía, también puedes indicarla directamente: uv run reflex init --template blank.
  • Cuando reflex run termine de arrancar, abre en el navegador la dirección que aparece en el log, App running at: http://localhost:3000. Si el puerto 3000 está ocupado, se usará otro, como el 3001.
  • Por defecto, el frontend se ejecuta en el puerto 3000 y el backend en el 8000.
  • La primera ejecución puede tardar entre 1 y 3 minutos porque descarga los paquetes de la interfaz. Necesitas conexión a internet.
  • Para detener el servidor, pulsa Ctrl + C en la terminal.

Compruébalo en el navegador — Justo después de crear el proyecto con --template blank, al abrir http://localhost:3000 deberías ver esta pantalla. El icono del sol, arriba a la derecha, es el botón para cambiar al modo oscuro.

localhost:3000

Vista previa

Welcome to Reflex!

Get started by editing tutorial_261019/tutorial_261019.py

Pantalla inicial de la plantilla blank de reflex init

1-4. Dos errores frecuentes en Windows (5 min)

Son problemas que encontramos de verdad al preparar el curso. Es muy probable que a tus alumnos les pase lo mismo, así que avísales con antelación.

SíntomaCausaSolución
UnicodeEncodeError: 'cp949' codec can't encode character '—' durante reflex initEn Windows, cuando la página de códigos del sistema no es UTF-8, Python escribe AGENTS.md con esa codificación heredada y falla con caracteres especiales. El mensaje de ejemplo es de un Windows en coreano (cp949); en un Windows en español la página de códigos heredada es cp1252, que también puede fallar con caracteres como '—'Ejecuta setx PYTHONUTF8 1, reinicia la terminal y vuelve a ejecutar reflex init
restartWithMergedOptions() was called, but the process has already been restarted durante reflex runNode es más antiguo que la versión requerida, así que Reflex fuerza el runtime de Bun, y en esa ruta falla el reinicio de React RouterActualiza Node a 22.22.0 o superior (por ejemplo: winget upgrade --id OpenJS.NodeJS.22)
  • Las variables de entorno definidas con setx solo se aplican a partir de las terminales que abras después. Si usas la terminal de VS Code, reinicia también VS Code.
  • Si winget responde que no encuentra ningún paquete instalado, comprueba el ID real del paquete con winget list --name Node.

Punto de control

  • node -v muestra 22.22.0 o superior.
  • Tras uv run reflex run, ves la pantalla básica en el navegador.
  • Puedes explicar con tus propias palabras que "las funciones de pantalla se compilan una vez y las funciones de eventos se ejecutan en el servidor cada vez".

← Anterior

Resumen del curso

Siguiente →

Lección 2 · Dibujar la pantalla con componentes

Recibe avisos de nuevas lecciones

Te avisaremos por correo cuando este curso tenga lecciones nuevas o se abra un curso de continuación.

Datos: tu correo electrónico · Finalidad: avisos de nuevas lecciones o de la publicación de este curso · Conservación: hasta que pidas que lo borremos. No lo usamos para nada más ni lo compartimos. Responde a cualquier aviso y lo borraremos enseguida.

Preguntas y respuestas

Pregunta lo que quieras sobre esta lección. Aquí se reúnen las preguntas de todas las versiones de idioma de esta página.

Se muestra como texto plano, sin enlaces ni formato.

R

ReflexKR

Aprende Python y Reflex haciendo. Todos los ejemplos se ejecutaron y verificaron en Reflex 0.10.0.

ReflexKR es gratis y sin banners publicitarios. Si te ayudó, puedes apoyarlo con un café. ☕ Invítanos un café

Aviso de afiliados
한국어English日本語简体中文EspañolDeutsch

© 2026 ReflexKR · Since 2026 · CC BY-NC 4.0

Built with Reflex