File: README.md
Python Web
Curso de 13 horas en vídeo para aprender desarrollo web con Python puro y Reflex desde cero.
Proyecto realizado durante emisiones en directo desde [Twitch](https://twitch.tv/mouredev)
Si consideras útil el curso, apóyalo haciendo "★ Star" en el repositorio. ¡Gracias!
Sobre el curso: muy importante
Desde la versión 0.4.0, Reflex utiliza Radix (en vez de Chakra) como sistema de componentes de UI. Ten en cuenta la versión que usas del framework, ya que algunos elementos han podido cambiar ligeramente. Te recomiendo que revises el código del proyecto original actualizado. A partir de la versión 0.4.0, todos los componentes de Chakra estarán en rx.chakra.
Ejemplo:
import reflex as rx
rx.button() # Ahora este será el botón de Radix
rx.chakra.button() # Anterior botón de ChakraAquí tienes un artículo con toda la información sobre la nueva versión.
Curso de Python Web: Tutorial en vídeo
- Curso de Python Web
- Lección 1 - Introducción
- Lección 2 - Características
- Lección 3 - Instalación
- Lección 4 - Primeros pasos
- Lección 5 - Fundamentos
- Lección 6 - Hola mundo
- Lección 7 - Componentes
- Lección 8 - Maquetación
- Lección 9 - Estilos
- Lección 10 - Colores e iconos
- Lección 11 - Fuentes
- Lección 12 - Imágenes
- Lección 13 - Fuentes remotas
- Lección 14 - Diseño responsive
- Lección 15 - Accesibilidad
- Lección 16 - Despliegue
- Próximos pasos
Tienes un canal llamado "python" en el servidor de Discord de la comunidad para preguntar, compartir y ayudar.
Curso de Python Web Avanzado: Tutorial en vídeo
- Curso de Python Web avanzado
- Lección 1 - Refactorización
- Lección 2 - Actualización datos
- Lección 3 - Router
- Lección 4 - Componentes React
- Lección 5 - Hosting nativo
- Lección 6 - Backend
- Lección 7 - Docker
- Lección 8 - CORS
- Lección 9 - GitHub Actions
- Lección 10 - Infraestructura
- Lección 11 - API
- Lección 12 - Estados
- Lección 13 - Integración API
- Lección 14 - Datos en tiempo real
- Lección 15 - Supabase y PostgreSQL
- Lección 16 - JSON serializable
- Lección 17 - Base de datos
- Lección 18 - Feature flags
- Lección 19 - Query PostgreSQL
- Lección 20 - Cálculo de fechas
- Lección 21 - Migración RadixUI
- Lección 22 - Carga de datos
- Lección 23 - Cliente / Servidor
- Lección 24 - Animaciones
- Lección 25 - Otras características
- Próximos pasos
Proyecto
Durante el curso aprenderemos desarrollo web con Python puro utilizando el framework Reflex. Realizaremos un proyecto práctico que consistirá en desarrollar y publicar mi nueva web de links moure.dev (añadiéndole nuevas funcionalidades).
Todo el código está disponible para que cualquiera pueda usarlo.
💻 [Accede al código del proyecto](./link_bio)
Tutorial extra en vídeo (+3 horas)
Proyecto práctico extra de código libre que consistirá en desarrollar y publicar la web del Calendario de aDEViento de la comunidad. Una activdad donde repartimos cursos y libros sobre programación en Navidad.
💻 [Accede al código del proyecto extra](https://github.com/mouredev/adeviento-web)
Otros proyectos creadas con Reflex
Estas son otras webs de código libre que he desarrollado para que puedas consultar su código y funcionalidades.
Información importante y preguntas frecuentes
Todo el contenido se ha creado en directo desde Twitch, y en este repositorio podrás encontrar las clases en vídeo, el código programado, enlaces de interés y la información relevante.
- Es un curso desde cero y no necesitas conocimientos previos sobre desarrollo web.
- Recuerda que he creado en el Discord un canal "🐍python" para que puedas comentar lo que quieras.
Enlaces de interés
- Web oficial de Python
- Web oficial de Reflex
- Documentación oficial de Reflex
- Repositorio en GitHub de Reflex
- Visual Studio Code
- Documentación CSS
- Curso de CSS
- Chakra UI
- Google Fonts
- Font Awesome
- Vercel
- Radix UI
- Ant Design
- Railway
- Twitch API
- Supabase
- ConfigCat
Curso de Python desde cero
Aprende Python desde sus fundamentos
Si quieres aprender desde cero, tienes gratis todos los tutoriales que he creado. Más de 44 horas desde fundamentos, frontend, backend o integración con IA.
Únete al campus de programación de la comunidad
Te presento [mouredev pro](https://mouredev.pro), mi proyecto más importante para ayudarte a estudiar programación y desarrollo de software de manera diferente.
¿Buscas un extra? Aquí encontrarás mis cursos editados por lecciones individuales, para avanzar a tu ritmo y guardar el progreso. También dispondrás de ejercicios y correcciones, test para validar tus conocimientos, examen y certificado público de finalización, soporte, foro de estudiantes, reunionnes grupales, cursos exclusivos y mucho más.
Entra en mouredev.pro y utiliza el cupón "PRO" con un 10% de descuento en tu primera suscripción.
Hola, mi nombre es Brais Moure.
Freelance full-stack iOS & Android engineer
Soy ingeniero de software desde 2010. Desde 2018 combino mi trabajo desarrollando Apps con la creación de contenido formativo sobre programación y tecnología en diferentes redes sociales como @mouredev.
Si quieres unirte a nuestra comunidad de desarrollo, aprender programación, mejorar tus habilidades y ayudar a la continuidad del proyecto, puedes encontrarnos en:
File: link_bio/README.md
Web de links de MoureDev
Proyecto desarrollado con [Python](https://www.python.org/) y [Reflex](https://reflex.dev/) que representa un sitio web personal estilo "[link in bio](https://moure.dev/)"
Sobre el curso: muy importante
Desde la versión 0.4.0, Reflex utiliza Radix (en vez de Chakra) como sistema de componentes de UI. Ten en cuenta la versión que usas del framework, ya que algunos elementos han podido cambiar ligeramente. Te recomiendo que revises el código del proyecto original actualizado. A partir de la versión 0.4.0, todos los componentes de Chakra estarán en rx.chakra.
Ejemplo:
import reflex as rx
rx.button() # Ahora este será el botón de Radix
rx.chakra.button() # Anterior botón de ChakraAquí tienes un artículo con toda la información sobre la nueva versión.
Tutorial
Consulta el curso de 6 horas en vídeo desde cero que muestra el proceso de desarrollo de la web.
Requisitos
Instala y crea un entorno virtual [venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/) en la raíz del proyecto
Mac/Linux: python3 -m pip install virtualenv
Windows: py -m pip install --user virtualenv
python3 -m venv .venv
Activa el entorno virtual
Mac/Linux: source .venv/bin/activate
Windows: .\.venv\Scripts\activate
Para desactivar el entorno virtual: deactivate
Dependencias
(Con el entorno virtual activo)
pip install reflex
También las tienes en requirements.txt
python -m pip install -r requirements.txt
Ejecución
reflex run
reflex run --loglevel debug (modo debug)
Acceder a http://localhost:3000 (frontend) y a http://localhost:8000 (backend)
Despliegue
Frontend
c contiene las instrucciones necesarias para empaquetar el frontend del proyecto y desplegarlo de forma estática. Éste, en concreto, desde Vercel. Se ejecuta automáticamente desde una GitHub Action creada en el repositorio.
sh remote_build.sh
cd link_bio
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
rm -rf frontend
reflex init
API_URL=[URL backend, en caso de existir] reflex export --frontend-only
unzip frontend.zip -d frontend
rm -f frontend.zip
deactivatePrepera el entorno, instala dependencias, inicializa el proyecto, crea la construcción de producción, y la descomprime.
Existe otro script llamado local_build.sh para realizar construcciones del frontend en local. En caso de existir un backend, debe referenciarse con un valor en API_URL, como aparece en el script remote_build.sh.
El proyecto se puede desplegar en cualquier proveedor o servidor que soporte recursos estáticos.
Configuración en Vercel:
- Se ha asociado el repositorio de GitHub al proyecto (para que cada
pushen la ramamaindesencadene un nuevo despliegue) - Build & Development Settings: Other
- Root Directory:
public(que contiene el empaquetado estático para producción) - Custom Domain: moure.dev
Backend
El fichero Dockerfile posee la configuración para generar la imagen y desplegar el backend como un contedor de Docker.
Éste, en concreto, desde Railway.
Dockerfile
FROM python:3.11
WORKDIR /app
COPY . .
ENV VIRTUAL_ENV=/app/.venv_docker
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN python3.11 -m venv $VIRTUAL_ENV
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
CMD reflex run --env prod --backend-onlyPrepara una image con Python, instala las dependencias del proyecto e inicia el proceso que ejecuta el backend.
El proyecto se puede desplegar en cualquier proveedor o servidor que soporte Python o Docker. Incluso frontend y backend en un mismo hosting o contenedor de Docker.
api.moure.dev se encuentra desplegado en Railway.
Configuración en Railway:
- Se ha asociado el repositorio de GitHub al proyecto (para que cada
pushen la ramamaindesencadene un nuevo despliegue) - Root Directory:
/link_bio(que contiene elDockerfile) - Variables:
PORT=8000(el puerto en el que escucha por defecto el backend) - Custom Domain: api.moure.dev