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'] = 'your-email@example.com'
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='your-email@example.com', recipients=['recipient@example.com'])
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
