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.

  1. 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)

  1. 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)

  1. 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)

  1. 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)

  1. 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

Mòdul 2: Conceptes Bàsics de Flask

Mòdul 3: Formularis i Entrada d'Usuari

Mòdul 4: Integració de Bases de Dades

Mòdul 5: Autenticació d'Usuaris

Mòdul 6: Conceptes Avançats de Flask

Mòdul 7: APIs RESTful amb Flask

Mòdul 8: Desplegament i Producció

Mòdul 9: Proves i Millors Pràctiques

Mòdul 10: Extensions i Ecosistema de Flask

© Copyright 2024. Tots els drets reservats