En esta guía aprenderás a implementar un sistema de login con Flask y MySQL, utilizando sesiones para manejar la autenticación de usuarios.
Flask ofrece una forma fácil de manejar sesiones de usuario mediante el uso de un diccionario llamado session. La información almacenada en la sesión está disponible a lo largo de todas las rutas mientras el usuario esté autenticado.
Antes de comenzar, asegúrate de tener instalados los siguientes paquetes:
pip install flask mysql-connector-python Organiza tu proyecto de la siguiente manera:
/login_flask
/templates
login.html
dashboard.html
app.py Crea una base de datos y una tabla de usuarios en MySQL:
CREATE DATABASE flask_login;
USE flask_login;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100) NOT NULL,
password VARCHAR(100) NOT NULL
); Crea el archivo login.html dentro de la carpeta templates:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h2>Iniciar Sesión</h2>
<form action="/login" method="POST">
<label for="username">Usuario:</label>
<input type="text" id="username" name="username" required>
<br>
<label for="password">Contraseña:</label>
<input type="password" id="password" name="password" required>
<br>
<input type="submit" value="Iniciar Sesión">
</form>
{% if message %}
<p>{{ message }}</p>
{% endif %}
</body>
</html> from flask import Flask, render_template, request, redirect, session
import mysql.connector
app = Flask(__name__)
app.secret_key = 'supersecretkey' # Clave para manejar las sesiones
# Configuración de la conexión a la base de datos MySQL
db = mysql.connector.connect(
host="localhost",
user="tu_usuario",
password="tu_contraseña",
database="flask_login"
)
cursor = db.cursor(dictionary=True)
# Ruta para mostrar el formulario de login
@app.route('/')
def index():
return render_template('login.html')
# Ruta para manejar el login
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
cursor.execute("SELECT * FROM users WHERE username=%s AND password=%s", (username, password))
user = cursor.fetchone()
if user:
session['username'] = user['username']
return redirect('/dashboard')
else:
return render_template('login.html', message='Credenciales incorrectas, inténtalo de nuevo.')
# Ruta protegida: solo accesible si el usuario ha iniciado sesión
@app.route('/dashboard')
def dashboard():
if 'username' in session:
return f"Bienvenido, {session['username']}! Has iniciado sesión."
else:
return redirect('/')
# Ruta para cerrar la sesión
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect('/')
if __name__ == '__main__':
app.run(debug=True, port=5000) En Flask, puedes acceder a las variables de sesión dentro de las plantillas HTML utilizando Jinja2, el motor de plantillas que Flask utiliza por defecto.
Si ya has iniciado sesión y has guardado el nombre de usuario en session[‘username’], puedes mostrar esta información en la plantilla.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title>Dashboard</title>
</head>
<body>
<h1>Bienvenido al Dashboard</h1>
{% if session['username'] %}
<p>Hola, {{ session['username'] }}! Has iniciado sesión.</p>
<a href="/logout">Cerrar sesión</a>
{% else %}
<p>No has iniciado sesión.</p>
{% endif %}
</body>
</html>