# Flask-LiveReload
Una extensión de Flask que proporciona recarga en vivo de las páginas web cuando los archivos de plantilla o estáticos cambian. Ideal para acelerar el desarrollo al eliminar la necesidad de recargar manualmente el navegador después de cada cambio.
## 🌟 Características
- **🔄 Recarga automática**: Monitorea los directorios `templates` y `static` en busca de cambios en los archivos.
- **⚡ Integración sencilla**: Se integra fácilmente en cualquier aplicación Flask.
- **🚀 Ligera**: Solo depende de Flask y watchdog, sin dependencias externas pesadas.
- **📡 Eficiente**: Utiliza Server-Sent Events (SSE) para notificar al navegador de los cambios.
- **🔧 Configurable**: Soporte para patrones personalizados de observación e ignorar archivos.
- **🛡️ Robusta**: Manejo de errores mejorado y logging detallado.
## 📦 Instalación
Puedes instalar Flask-LiveReload directamente desde PyPI usando pip:
```bash
pip install Flask-LiveReload
```
## 🚀 Uso
### Configuración Básica
Para empezar a usar Flask-LiveReload, simplemente importa la clase `LiveReload` y pásale tu aplicación Flask.
```python
from flask import Flask, render_template
from flask_livereload import LiveReload
app = Flask(__name__)
app.debug = True # ⚠️ IMPORTANTE: Solo funciona en modo debug
livereload = LiveReload(app)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
```
### Configuración Avanzada
Puedes personalizar qué archivos observar e ignorar:
```python
from flask import Flask, render_template
from flask_livereload import LiveReload
app = Flask(__name__)
app.debug = True
# Configurar patrones personalizados
app.config["LIVERELOAD_WATCH_PATTERNS"] = [
"statics/**/*.html",
"statics/**/*.js",
"statics/**/*.css",
"templates/**/*.html",
]
app.config["LIVERELOAD_IGNORE_PATTERNS"] = [
"__pycache__",
".venv",
".git",
".pytest_cache",
"*.pyc",
"*.pyo",
"*.log",
".DS_Store",
"node_modules",
]
livereload = LiveReload(app)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run(debug=True)
```
## 🧠 ¿Cómo funciona?
Flask-LiveReload inyecta un pequeño script de JavaScript en tus páginas HTML. Este script se conecta a un endpoint de Server-Sent Events (SSE) en `/_livereload`. En el lado del servidor, un observador de archivos monitorea los directorios configurados. Cuando se detecta un cambio, se envía un mensaje al navegador a través del SSE, lo que provoca que la página se recargue.
## ⚙️ Configuración
### Variables de Entorno
```bash
# Nivel de logging (DEBUG, INFO, WARNING, ERROR)
export LOG_LEVEL=INFO
```
### Opciones de Configuración de Flask
```python
# Patrones de archivos a observar (opcional)
app.config["LIVERELOAD_WATCH_PATTERNS"] = [
"statics/**/*.html", # Todos los HTML en statics y subdirectorios
"statics/**/*.js", # Todos los JS en statics y subdirectorios
"templates/**/*.html", # Todos los HTML en templates y subdirectorios
]
# Patrones de archivos a ignorar (opcional)
app.config["LIVERELOAD_IGNORE_PATTERNS"] = [
"__pycache__",
".venv",
".git",
"*.pyc",
"node_modules",
]
```
## 🐛 Solución de Problemas
### Problemas Comunes
1. **No se recarga automáticamente**:
- Verifica que `app.debug = True`
- Revisa los logs para errores
- Asegúrate de que los archivos estén en los directorios correctos
2. **Error de importación**:
- Verifica que el paquete esté instalado correctamente
- Asegúrate de usar el token correcto si es un repositorio privado
3. **Problemas con patrones**:
- Los patrones usan sintaxis glob
- Usa `./` para rutas relativas al directorio de la aplicación
### Logging
Habilita logging detallado para debugging:
```bash
export LOG_LEVEL=DEBUG
```
## 📚 Documentación Adicional
Para ejemplos más detallados y guías de uso, consulta:
- `examples/README.md` - Guía completa de uso
- `examples/local_development_guide.md` - Desarrollo local
- `examples/standalone_example.py` - Ejemplo básico
- `examples/custom_watch_patterns_example.py` - Ejemplo con patrones personalizados
## 🤝 Contribuciones
Las contribuciones son bienvenidas. Si tienes alguna idea, sugerencia o informe de error, por favor abre un issue o envía un pull request.
## 📄 Licencia
Este proyecto está bajo la licencia MIT. Consulta el archivo `LICENSE` para más detalles.
Raw data
{
"_id": null,
"home_page": null,
"name": "Flask-LiveReload",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "flask, livereload, auto-reload, development, watchdog",
"author": null,
"author_email": "Hernan Varillas <hernan.varillas93@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/f2/bc/9a34f8185c5f1aa400b144b7c0e0a51a43e6d35a71bb41bb717df9e4539a/flask_livereload-0.2.1.tar.gz",
"platform": null,
"description": "# Flask-LiveReload\n\nUna extensi\u00f3n de Flask que proporciona recarga en vivo de las p\u00e1ginas web cuando los archivos de plantilla o est\u00e1ticos cambian. Ideal para acelerar el desarrollo al eliminar la necesidad de recargar manualmente el navegador despu\u00e9s de cada cambio.\n\n## \ud83c\udf1f Caracter\u00edsticas\n\n- **\ud83d\udd04 Recarga autom\u00e1tica**: Monitorea los directorios `templates` y `static` en busca de cambios en los archivos.\n- **\u26a1 Integraci\u00f3n sencilla**: Se integra f\u00e1cilmente en cualquier aplicaci\u00f3n Flask.\n- **\ud83d\ude80 Ligera**: Solo depende de Flask y watchdog, sin dependencias externas pesadas.\n- **\ud83d\udce1 Eficiente**: Utiliza Server-Sent Events (SSE) para notificar al navegador de los cambios.\n- **\ud83d\udd27 Configurable**: Soporte para patrones personalizados de observaci\u00f3n e ignorar archivos.\n- **\ud83d\udee1\ufe0f Robusta**: Manejo de errores mejorado y logging detallado.\n\n## \ud83d\udce6 Instalaci\u00f3n\n\nPuedes instalar Flask-LiveReload directamente desde PyPI usando pip:\n\n```bash\npip install Flask-LiveReload\n```\n\n## \ud83d\ude80 Uso\n\n### Configuraci\u00f3n B\u00e1sica\n\nPara empezar a usar Flask-LiveReload, simplemente importa la clase `LiveReload` y p\u00e1sale tu aplicaci\u00f3n Flask.\n\n```python\nfrom flask import Flask, render_template\nfrom flask_livereload import LiveReload\n\napp = Flask(__name__)\napp.debug = True # \u26a0\ufe0f IMPORTANTE: Solo funciona en modo debug\nlivereload = LiveReload(app)\n\n@app.route('/')\ndef index():\n return render_template('index.html')\n\nif __name__ == '__main__':\n app.run(debug=True)\n```\n\n### Configuraci\u00f3n Avanzada\n\nPuedes personalizar qu\u00e9 archivos observar e ignorar:\n\n```python\nfrom flask import Flask, render_template\nfrom flask_livereload import LiveReload\n\napp = Flask(__name__)\napp.debug = True\n\n# Configurar patrones personalizados\napp.config[\"LIVERELOAD_WATCH_PATTERNS\"] = [\n \"statics/**/*.html\",\n \"statics/**/*.js\",\n \"statics/**/*.css\",\n \"templates/**/*.html\",\n]\n\napp.config[\"LIVERELOAD_IGNORE_PATTERNS\"] = [\n \"__pycache__\",\n \".venv\",\n \".git\",\n \".pytest_cache\",\n \"*.pyc\",\n \"*.pyo\",\n \"*.log\",\n \".DS_Store\",\n \"node_modules\",\n]\n\nlivereload = LiveReload(app)\n\n@app.route('/')\ndef index():\n return render_template('index.html')\n\nif __name__ == '__main__':\n app.run(debug=True)\n```\n\n## \ud83e\udde0 \u00bfC\u00f3mo funciona?\n\nFlask-LiveReload inyecta un peque\u00f1o script de JavaScript en tus p\u00e1ginas HTML. Este script se conecta a un endpoint de Server-Sent Events (SSE) en `/_livereload`. En el lado del servidor, un observador de archivos monitorea los directorios configurados. Cuando se detecta un cambio, se env\u00eda un mensaje al navegador a trav\u00e9s del SSE, lo que provoca que la p\u00e1gina se recargue.\n\n## \u2699\ufe0f Configuraci\u00f3n\n\n### Variables de Entorno\n\n```bash\n# Nivel de logging (DEBUG, INFO, WARNING, ERROR)\nexport LOG_LEVEL=INFO\n```\n\n### Opciones de Configuraci\u00f3n de Flask\n\n```python\n# Patrones de archivos a observar (opcional)\napp.config[\"LIVERELOAD_WATCH_PATTERNS\"] = [\n \"statics/**/*.html\", # Todos los HTML en statics y subdirectorios\n \"statics/**/*.js\", # Todos los JS en statics y subdirectorios\n \"templates/**/*.html\", # Todos los HTML en templates y subdirectorios\n]\n\n# Patrones de archivos a ignorar (opcional)\napp.config[\"LIVERELOAD_IGNORE_PATTERNS\"] = [\n \"__pycache__\",\n \".venv\",\n \".git\",\n \"*.pyc\",\n \"node_modules\",\n]\n```\n\n## \ud83d\udc1b Soluci\u00f3n de Problemas\n\n### Problemas Comunes\n\n1. **No se recarga autom\u00e1ticamente**: \n - Verifica que `app.debug = True`\n - Revisa los logs para errores\n - Aseg\u00farate de que los archivos est\u00e9n en los directorios correctos\n\n2. **Error de importaci\u00f3n**:\n - Verifica que el paquete est\u00e9 instalado correctamente\n - Aseg\u00farate de usar el token correcto si es un repositorio privado\n\n3. **Problemas con patrones**:\n - Los patrones usan sintaxis glob\n - Usa `./` para rutas relativas al directorio de la aplicaci\u00f3n\n\n### Logging\n\nHabilita logging detallado para debugging:\n\n```bash\nexport LOG_LEVEL=DEBUG\n```\n\n## \ud83d\udcda Documentaci\u00f3n Adicional\n\nPara ejemplos m\u00e1s detallados y gu\u00edas de uso, consulta:\n- `examples/README.md` - Gu\u00eda completa de uso\n- `examples/local_development_guide.md` - Desarrollo local\n- `examples/standalone_example.py` - Ejemplo b\u00e1sico\n- `examples/custom_watch_patterns_example.py` - Ejemplo con patrones personalizados\n\n## \ud83e\udd1d Contribuciones\n\nLas contribuciones son bienvenidas. Si tienes alguna idea, sugerencia o informe de error, por favor abre un issue o env\u00eda un pull request.\n\n## \ud83d\udcc4 Licencia\n\nEste proyecto est\u00e1 bajo la licencia MIT. Consulta el archivo `LICENSE` para m\u00e1s detalles.\n",
"bugtrack_url": null,
"license": null,
"summary": "Live reloading for Flask applications during development.",
"version": "0.2.1",
"project_urls": {
"Bug Tracker": "https://github.com/hvarillas/flask-livereload/issues",
"Homepage": "https://github.com/hvarillas/flask-livereload"
},
"split_keywords": [
"flask",
" livereload",
" auto-reload",
" development",
" watchdog"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "d92ea550be54454af9c594af9506b6defe904b88d27f5b811994ed198ce3cf4c",
"md5": "f20deb676e18ee9a895c07486649b3ce",
"sha256": "3c3df3a23cb1d5c6f1428f09458e9a489e213a49dec51f46c56758a7584cb1ff"
},
"downloads": -1,
"filename": "flask_livereload-0.2.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f20deb676e18ee9a895c07486649b3ce",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 7034,
"upload_time": "2025-08-23T15:48:52",
"upload_time_iso_8601": "2025-08-23T15:48:52.853726Z",
"url": "https://files.pythonhosted.org/packages/d9/2e/a550be54454af9c594af9506b6defe904b88d27f5b811994ed198ce3cf4c/flask_livereload-0.2.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f2bc9a34f8185c5f1aa400b144b7c0e0a51a43e6d35a71bb41bb717df9e4539a",
"md5": "bed753fefa4152d9643f9fb7e4726d0b",
"sha256": "d169c2c7181b5146a40b3d34a05f7250a9a813ab394cca4b480d3959e0c7efcf"
},
"downloads": -1,
"filename": "flask_livereload-0.2.1.tar.gz",
"has_sig": false,
"md5_digest": "bed753fefa4152d9643f9fb7e4726d0b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 7648,
"upload_time": "2025-08-23T15:48:54",
"upload_time_iso_8601": "2025-08-23T15:48:54.413166Z",
"url": "https://files.pythonhosted.org/packages/f2/bc/9a34f8185c5f1aa400b144b7c0e0a51a43e6d35a71bb41bb717df9e4539a/flask_livereload-0.2.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-08-23 15:48:54",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "hvarillas",
"github_project": "flask-livereload",
"github_not_found": true,
"lcname": "flask-livereload"
}