Código de fuente de una aplicación web que implementa un sistema de autenticación. Incorpora una versión simple de un registro, iniciar y cerrar sesión. Hace uso del sistema de base de datos SQLite, cookies y templates del framework; junto con el módulo hashlib para cifrar las contraseñas con MD5.
Descargar: código de fuente completo
Recuerda descargar el código completo para ejecutar el ejemplo.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# main.py
#
# Copyright 2013 Recursos Python - www.recursospython.com
#
#
from hashlib import md5
import web
urls = (
"/", "Index",
"/signup", "SignUp",
"/logout", "LogOut"
)
app = web.application(urls, globals())
render = web.template.render("templates")
class Index:
"""Página principal"""
def GET(self):
cookies = web.cookies()
username = cookies.get("webusername")
# Debería realizarse una comprobación del hash de la cookie
# con el de la base de datos.
return render.index(username)
def POST(self):
"""Ingresar usuario"""
i = web.input()
# Buscar el usuario en la bd
# Argumento 'vars' para prevenir inyecciones SQL
db = web.database(dbn="sqlite", db="users.db")
q = db.select("users", where="username=$username",
what="password", vars={"username": i.username})
if q:
db_password = list(q)[0]["password"]
if db_password == md5(i.password).hexdigest():
web.setcookie("webusername", i.username)
web.setcookie("webpassword", db_password)
web.seeother("/")
else:
return "Usuario o clave incorrecto."
else:
return "Usuario o clave incorrecto."
class SignUp:
"""Formulario de registro"""
def GET(self):
return render.signup()
def POST(self):
"""Crear usuario"""
i = web.input()
# Verificar que se hayan ingresado los campos.
if not i.username or not i.password:
return "Ingrese todos los datos."
# Abrir la base de datos y añadir un nuevo usuario.
# Los cambios se guardan automáticamente (commit).
db = web.database(dbn="sqlite", db="users.db")
db.insert("users", username=i.username,
password=md5(i.password).hexdigest())
web.seeother("/")
class LogOut:
"""Cerrar sesión"""
def GET(self):
# expires=-1 remueve la cookie
web.setcookie("webusername", "", expires=-1)
web.setcookie("webpassword", "", expires=-1)
web.seeother("/")
if __name__ == "__main__":
app.run()
Curso online 👨💻
¡Ya lanzamos el curso oficial de Recursos Python en Udemy!
Un curso moderno para aprender Python desde cero con programación orientada a objetos, SQL y tkinter en 2024.
Consultoría 💡
Ofrecemos servicios profesionales de desarrollo y capacitación en Python a personas y empresas. Consultanos por tu proyecto.