Introducción
En este laboratorio, mostraremos cómo crear y usar los blueprints de Flask para estructurar tu aplicación utilizando vistas. Los blueprints de Flask te permiten agrupar vistas, código y recursos relacionados, lo que hace que tu aplicación sea modular y escalable. Crearemos una aplicación simple que incluirá la autenticación de usuarios y la funcionalidad de publicaciones de blogs.
Nota: Debes crear el archivo de código por ti mismo y ejecutarlo en el entorno. Puedes previsualizar el estado del servicio Flask en Web 5000.
Crear un blueprint
Comencemos creando un blueprint para nuestra aplicación. Este blueprint se llamará 'auth' y manejará las vistas relacionadas con la autenticación de usuarios. Definiremos nuestro blueprint en un módulo separado llamado flaskr/auth.py.
## flaskr/auth.py
import functools
from flask import Blueprint, flash, g, redirect, render_template, request, session, url_for
from werkzeug.security import check_password_hash, generate_password_hash
from flaskr.db import get_db
## Crea un blueprint llamado 'auth'
bp = Blueprint('auth', __name__, url_prefix='/auth')
Registrar el blueprint
Después de crear el blueprint, debemos registrarlo con nuestra aplicación. Esto se hace en la función de fábrica de la aplicación en flaskr/__init__.py.
## flaskr/__init__.py
def create_app():
app =...
## código existente omitido
## Importa y registra el blueprint
from. import auth
app.register_blueprint(auth.bp)
return app
Implementar la vista de registro
Ahora, implementemos la vista de registro en flaskr/auth.py. Esta vista mostrará un formulario de registro y manejará la presentación del formulario.
## flaskr/auth.py
@bp.route('/register', methods=('GET', 'POST'))
def register():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
if not username:
error = 'El nombre de usuario es obligatorio.'
elif not password:
error = 'La contraseña es obligatoria.'
if error is None:
try:
db.execute(
"INSERT INTO user (username, password) VALUES (?,?)",
(username, generate_password_hash(password)),
)
db.commit()
except db.IntegrityError:
error = f"El usuario {username} ya está registrado."
else:
return redirect(url_for("auth.login"))
flash(error)
return render_template('auth/register.html')
Implementar la vista de inicio de sesión
A continuación, implementaremos la vista de inicio de sesión en flaskr/auth.py. Esta vista manejará la funcionalidad de inicio de sesión de usuario.
## flaskr/auth.py
@bp.route('/login', methods=('GET', 'POST'))
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
db = get_db()
error = None
user = db.execute(
'SELECT * FROM user WHERE username =?', (username,)
).fetchone()
if user is None:
error = 'Nombre de usuario incorrecto.'
elif not check_password_hash(user['password'], password):
error = 'Contraseña incorrecta.'
if error is None:
session.clear()
session['user_id'] = user['id']
return redirect(url_for('index'))
flash(error)
return render_template('auth/login.html')
Implementar la vista de cierre de sesión
Ahora agreguemos una vista de cierre de sesión en flaskr/auth.py. Esta vista manejará la funcionalidad de cierre de sesión de usuario.
## flaskr/auth.py
@bp.route('/logout')
def logout():
session.clear()
return redirect(url_for('index'))
Implementar el decorador de inicio de sesión requerido
También necesitaremos un decorador para proteger nuestras vistas que requieren que el usuario esté autenticado. Este decorador se implementará en flaskr/auth.py.
## flaskr/auth.py
def login_required(view):
@functools.wraps(view)
def wrapped_view(**kwargs):
if g.user is None:
return redirect(url_for('auth.login'))
return view(**kwargs)
return wrapped_view
Resumen
En este laboratorio, hemos aprendido cómo usar los blueprints de Flask para estructurar nuestra aplicación. Hemos creado un blueprint para la autenticación de usuarios y hemos implementado vistas de registro, inicio de sesión y cierre de sesión. También hemos implementado un decorador para proteger las vistas que requieren que el usuario esté autenticado. Con este conocimiento, ahora puedes estructurar tus aplicaciones de Flask de manera modular y escalable.