En aquest tema, aprendrem com gestionar el registre (logging) i la depuració (debugging) en una aplicació Flask. Aquests conceptes són essencials per identificar i solucionar problemes, així com per monitoritzar el comportament de la nostra aplicació en entorns de desenvolupament i producció.
- Introducció al Registre (Logging)
El registre és el procés de gravar missatges de text que descriuen el comportament de l'aplicació. Aquests missatges poden incloure informació sobre errors, advertències, informació general i depuració.
1.1. Configuració Bàsica del Registre
Flask utilitza el mòdul logging
de Python per gestionar els registres. A continuació, es mostra com configurar el registre bàsic en una aplicació Flask:
import logging from flask import Flask app = Flask(__name__) # Configuració bàsica del registre logging.basicConfig(level=logging.DEBUG) @app.route('/') def home(): app.logger.debug('Això és un missatge de depuració') app.logger.info('Això és un missatge informatiu') app.logger.warning('Això és un missatge d\'advertència') app.logger.error('Això és un missatge d\'error') app.logger.critical('Això és un missatge crític') return "Consulta els registres per veure els missatges" if __name__ == '__main__': app.run(debug=True)
1.2. Nivells de Registre
Els nivells de registre determinen la gravetat dels missatges que es registren. Els nivells comuns són:
DEBUG
: Missatges detallats, generalment útils només per a depuració.INFO
: Missatges informatius que indiquen el progrés normal de l'aplicació.WARNING
: Missatges d'advertència que indiquen un problema potencial.ERROR
: Missatges d'error que indiquen un problema que ha impedit que una part de l'aplicació funcioni correctament.CRITICAL
: Missatges crítics que indiquen un problema greu que ha impedit que l'aplicació funcioni.
1.3. Registre a Fitxers
Per registrar missatges en un fitxer, podem configurar un FileHandler
:
import logging from logging.handlers import RotatingFileHandler from flask import Flask app = Flask(__name__) # Configuració del registre a fitxer handler = RotatingFileHandler('app.log', maxBytes=10000, backupCount=1) handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) app.logger.addHandler(handler) @app.route('/') def home(): app.logger.info('Això és un missatge informatiu registrat en un fitxer') return "Consulta el fitxer de registre per veure els missatges" if __name__ == '__main__': app.run(debug=True)
- Depuració (Debugging)
La depuració és el procés d'identificar i solucionar errors en el codi. Flask ofereix diverses eines per facilitar la depuració.
2.1. Mode de Depuració
El mode de depuració de Flask proporciona informació detallada sobre errors i permet la recàrrega automàtica de l'aplicació quan es fan canvis en el codi.
from flask import Flask app = Flask(__name__) @app.route('/') def home(): return "Hola, món!" if __name__ == '__main__': app.run(debug=True)
2.2. Depurador Interactiu
Quan el mode de depuració està activat, Flask proporciona un depurador interactiu que permet explorar l'estat de l'aplicació en el moment en què es produeix un error.
2.3. Utilització de PDB
PDB (Python Debugger) és una eina de depuració integrada en Python que permet executar el codi pas a pas i inspeccionar variables. Per utilitzar PDB en una aplicació Flask, podem inserir una crida a pdb.set_trace()
en el codi:
import pdb from flask import Flask app = Flask(__name__) @app.route('/') def home(): pdb.set_trace() # Punt de ruptura per a la depuració return "Hola, món!" if __name__ == '__main__': app.run(debug=True)
- Exercicis Pràctics
Exercici 1: Configuració del Registre
- Configura el registre en una aplicació Flask perquè registri missatges de nivell
INFO
i superior en un fitxer anomenatapp.log
. - Afegeix missatges de registre en diferents punts de l'aplicació per registrar informació sobre les sol·licituds rebudes.
Exercici 2: Depuració amb PDB
- Afegeix un punt de ruptura amb
pdb.set_trace()
en una ruta de la teva aplicació Flask. - Executa l'aplicació en mode de depuració i accedeix a la ruta per activar el depurador interactiu.
- Utilitza les comandes de PDB per inspeccionar l'estat de l'aplicació i continuar l'execució.
- Conclusió
En aquesta secció, hem après com configurar el registre i utilitzar eines de depuració en una aplicació Flask. El registre ens permet monitoritzar el comportament de l'aplicació i identificar problemes, mentre que les eines de depuració ens ajuden a solucionar errors de manera eficient. Aquests conceptes són fonamentals per mantenir una aplicació robusta i fiable.
En el següent tema, explorarem com crear APIs RESTful amb Flask, un component clau per a la comunicació entre aplicacions web i serveis externs.
Curs de Desenvolupament Web amb Flask
Mòdul 1: Introducció a Flask
- Què és Flask?
- Configuració del Teu Entorn de Desenvolupament
- Creant la Teva Primera Aplicació Flask
- Entenent l'Estructura d'una Aplicació Flask
Mòdul 2: Conceptes Bàsics de Flask
- Enrutament i Mapeig d'URL
- Gestió de Mètodes HTTP
- Renderització de Plantilles amb Jinja2
- Treballant amb Fitxers Estàtics
Mòdul 3: Formularis i Entrada d'Usuari
Mòdul 4: Integració de Bases de Dades
- Introducció a Flask-SQLAlchemy
- Definició de Models
- Realització d'Operacions CRUD
- Migracions de Bases de Dades amb Flask-Migrate
Mòdul 5: Autenticació d'Usuaris
- Registre d'Usuaris
- Inici i Tancament de Sessió d'Usuaris
- Hashing de Contrasenyes
- Gestió de Sessions d'Usuaris
Mòdul 6: Conceptes Avançats de Flask
- Blueprints per a Aplicacions Grans
- Gestió d'Errors
- Pàgines d'Error Personalitzades
- Registre i Depuració
Mòdul 7: APIs RESTful amb Flask
- Introducció a les APIs RESTful
- Creació de Punts Finals RESTful
- Gestió de Dades JSON
- Autenticació per a APIs
Mòdul 8: Desplegament i Producció
- Configuració de Flask per a Producció
- Desplegament a Heroku
- Desplegament a AWS
- Monitorització i Optimització del Rendiment
Mòdul 9: Proves i Millors Pràctiques
- Proves Unitàries amb Flask
- Proves d'Integració
- Cobertura de Proves
- Millors Pràctiques per al Desenvolupament amb Flask