Flask és un microframework lleuger per a Python que permet als desenvolupadors crear aplicacions web de manera ràpida i senzilla. Tot i que Flask és minimalista per disseny, la seva funcionalitat es pot ampliar fàcilment mitjançant l'ús d'extensions. Aquestes extensions proporcionen funcionalitats addicionals que poden ser integrades a les aplicacions Flask per satisfer necessitats específiques.
- Flask-WTF
Descripció
Flask-WTF és una extensió que integra WTForms amb Flask. Proporciona eines per a la creació i validació de formularis web.
Característiques
- Validació de formularis.
- Prevenció d'atacs CSRF (Cross-Site Request Forgery).
- Suport per a diversos tipus de camps de formulari.
Exemple de Codi
from flask import Flask, render_template, request from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'mysecretkey' class MyForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) submit = SubmitField('Submit') @app.route('/form', methods=['GET', 'POST']) def form(): form = MyForm() if form.validate_on_submit(): return f'Hello, {form.name.data}!' return render_template('form.html', form=form) if __name__ == '__main__': app.run(debug=True)
- Flask-SQLAlchemy
Descripció
Flask-SQLAlchemy és una extensió que simplifica la integració de SQLAlchemy amb Flask. Proporciona una interfície ORM (Object-Relational Mapping) per a la gestió de bases de dades.
Característiques
- Suport per a múltiples bases de dades.
- Simplificació de les operacions CRUD.
- Migracions de bases de dades.
Exemple de Codi
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), nullable=False, unique=True) @app.route('/') def index(): user = User.query.first() return f'Hello, {user.username}!' if __name__ == '__main__': app.run(debug=True)
- Flask-Migrate
Descripció
Flask-Migrate és una extensió que utilitza Alembic per gestionar les migracions de bases de dades en aplicacions Flask que utilitzen SQLAlchemy.
Característiques
- Creació i aplicació de migracions de bases de dades.
- Integració amb Flask-SQLAlchemy.
- Suport per a múltiples bases de dades.
Exemple de Codi
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' db = SQLAlchemy(app) migrate = Migrate(app, db) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(150), nullable=False, unique=True) if __name__ == '__main__': app.run(debug=True)
- Flask-Login
Descripció
Flask-Login és una extensió que gestiona l'autenticació d'usuaris en aplicacions Flask. Proporciona eines per a la gestió de sessions d'usuari.
Característiques
- Gestió de sessions d'usuari.
- Suport per a l'inici i tancament de sessió.
- Protecció de rutes amb decoradors.
Exemple de Codi
from flask import Flask, render_template, redirect, url_for from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user app = Flask(__name__) app.config['SECRET_KEY'] = 'mysecretkey' login_manager = LoginManager(app) class User(UserMixin): def __init__(self, id): self.id = id @login_manager.user_loader def load_user(user_id): return User(user_id) @app.route('/login') def login(): user = User(id=1) login_user(user) return redirect(url_for('protected')) @app.route('/protected') @login_required def protected(): return 'Logged in successfully!' @app.route('/logout') @login_required def logout(): logout_user() return 'Logged out successfully!' if __name__ == '__main__': app.run(debug=True)
- Flask-Mail
Descripció
Flask-Mail és una extensió que facilita l'enviament de correus electrònics des d'una aplicació Flask.
Característiques
- Enviament de correus electrònics.
- Suport per a múltiples protocols de correu (SMTP, SSL, TLS).
- Integració amb plantilles Jinja2 per a correus electrònics.
Exemple de Codi
from flask import Flask from flask_mail import Mail, Message app = Flask(__name__) app.config['MAIL_SERVER'] = 'smtp.example.com' app.config['MAIL_PORT'] = 587 app.config['MAIL_USERNAME'] = '[email protected]' app.config['MAIL_PASSWORD'] = 'your-password' app.config['MAIL_USE_TLS'] = True app.config['MAIL_USE_SSL'] = False mail = Mail(app) @app.route('/send-mail') def send_mail(): msg = Message('Hello', sender='[email protected]', recipients=['[email protected]']) msg.body = 'This is a test email sent from a Flask application!' mail.send(msg) return 'Mail sent!' if __name__ == '__main__': app.run(debug=True)
Conclusió
Les extensions de Flask permeten ampliar les capacitats del framework de manera significativa, facilitant la implementació de funcionalitats complexes amb poc esforç. En aquest mòdul, hem explorat algunes de les extensions més populars, com Flask-WTF, Flask-SQLAlchemy, Flask-Migrate, Flask-Login i Flask-Mail. Aquestes eines són essencials per a qualsevol desenvolupador que vulgui crear aplicacions web robustes i escalables amb Flask.
En el següent tema, explorarem l'ús de Flask-Mail per a l'enviament de correus electrònics en més detall.
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