Registro de usuarios

This commit is contained in:
Tatiana Villa Ema 2026-04-25 11:08:48 +02:00
parent bb44321356
commit 29ec8b5a1b
4 changed files with 88 additions and 0 deletions

31
app.py
View File

@ -101,6 +101,37 @@ def logout():
session.clear()
return redirect(url_for("login"))
@app.route("/registro", methods=["GET", "POST"])
def registro():
error = None
ok = None
if request.method == "POST":
usuario = request.form.get("usuario", "").strip().lower()
nombre = request.form.get("nombre", "").strip()
password = request.form.get("password", "")
password2 = request.form.get("password2", "")
# Validaciones
if not usuario or not password or not nombre:
error = "Todos los campos son obligatorios"
elif len(usuario) < 3 or not usuario.isalnum():
error = "El usuario debe tener al menos 3 caracteres y solo letras/numeros"
elif len(password) < 6:
error = "La contrasena debe tener al menos 6 caracteres"
elif password != password2:
error = "Las contrasenas no coinciden"
else:
users = cargar_usuarios()
if usuario in users:
error = "Ese nombre de usuario ya esta en uso"
else:
users[usuario] = {
"password_hash": generate_password_hash(password),
"nombre": nombre
}
guardar_usuarios(users)
ok = "Cuenta creada correctamente. Ya puedes iniciar sesion."
return render_template("registro.html", error=error, ok=ok)
# -----------------------------------------------------------------------
# Pagina principal
# -----------------------------------------------------------------------

View File

@ -311,3 +311,12 @@ h2 {
font-size: .85rem;
margin-top: .5rem;
}
.alert-ok {
background: #1a3d25;
color: #6fcf97;
border: 1px solid #276738;
border-radius: 6px;
padding: .5rem .75rem;
font-size: .85rem;
margin-top: .5rem;
}

View File

@ -25,6 +25,9 @@
Entrar
</button>
</form>
<p style="text-align:center; margin-top:1rem; font-size:.85rem; color:var(--text-muted);">
¿No tienes cuenta? <a href="/registro">Registrate</a>
</p>
</div>
</body>
</html>

45
templates/registro.html Normal file
View File

@ -0,0 +1,45 @@
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Crear cuenta — Lista de la Compra</title>
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body class="login-page">
<div class="login-card">
<h1>🛒 Lista de la Compra</h1>
<p class="subtitle">Crea tu cuenta</p>
{% if error %}
<div class="alert">{{ error }}</div>
{% endif %}
{% if ok %}
<div class="alert alert-ok">{{ ok }}</div>
<a href="/login" class="btn btn-primary" style="width:100%; text-align:center; display:block; margin-top:.5rem;">
Ir al login
</a>
{% else %}
<form method="post">
<label for="nombre">Nombre</label>
<input id="nombre" name="nombre" type="text"
placeholder="Tu nombre" autocomplete="name" required autofocus>
<label for="usuario">Usuario</label>
<input id="usuario" name="usuario" type="text"
placeholder="solo letras y numeros, min. 3" autocomplete="username" required>
<label for="password">Contrasena</label>
<input id="password" name="password" type="password"
placeholder="min. 6 caracteres" autocomplete="new-password" required>
<label for="password2">Repite la contrasena</label>
<input id="password2" name="password2" type="password"
placeholder="••••••••" autocomplete="new-password" required>
<button type="submit" class="btn btn-primary" style="width:100%; margin-top:.5rem;">
Crear cuenta
</button>
</form>
{% endif %}
<p style="text-align:center; margin-top:1rem; font-size:.85rem; color:var(--text-muted);">
¿Ya tienes cuenta? <a href="/login">Inicia sesion</a>
</p>
</div>
</body>
</html>