Gestión de Alumnos con Python + Flask + HTML

- Si es de tu interés este artículo, apoyanos compartiendo en tus redes sociales favoritas y de esa manera también incentivando a tus amigos que crees les pueda interesar a que nos lean.


Gestión de Alumnos con Python + Flask + HTML



📌 Proyecto 2: Gestión de Alumnos con Flask


En este artículo, te mostraré cómo desarrollamos “Proyecto 2”, una aplicación web en Python con Flask para gestionar alumnos. Permite agregar, editar y eliminar alumnos, almacenando la información en un archivo de texto (alumnos.txt) dentro de la carpeta Documentos/python/Proyecto2.


🔹 Tecnologías Utilizadas

Python: Backend para manejar los datos.

Flask: Framework web para la interfaz.

HTML + Bootstrap: Diseño responsive y atractivo.

OS (módulo de Python): Para gestionar archivos y rutas.


🔹 Objetivo del Proyecto


El sistema permite registrar alumnos, almacenando los siguientes datos:

Nombre

Edad

Correo Electrónico

Número de Materias


🔹 Funcionalidades


Registrar un alumno

Editar los datos de un alumno

Eliminar un alumno

Mostrar la lista de alumnos registrados

Guardar la información en alumnos.txt


📌 Código Fuente Completo


🔹 Archivo app.py


from flask import Flask, render_template, request, redirect, url_for

import os


app = Flask(__name__)


# Ruta donde se guardará la información en Documentos/python/Proyecto2

documents_path = os.path.join(os.path.expanduser("~"), "Documents")

folder_path = os.path.join(documents_path, "python", "Proyecto2")

file_path = os.path.join(folder_path, "alumnos.txt")


# Crear la carpeta si no existe

if not os.path.exists(folder_path):

    os.makedirs(folder_path)


# Funciones para leer y escribir alumnos

def leer_alumnos():

    if not os.path.exists(file_path):

        return []

    with open(file_path, "r", encoding="utf-8") as file:

        return [line.strip().split(",") for line in file.readlines()]


def escribir_alumnos(alumnos):

    with open(file_path, "w", encoding="utf-8") as file:

        for alumno in alumnos:

            file.write(",".join(alumno) + "\n")


@app.route('/')

def index():

    alumnos = leer_alumnos()

    return render_template('index.html', alumnos=enumerate(alumnos))


@app.route('/agregar', methods=['POST'])

def agregar():

    nombre = request.form['nombre']

    edad = request.form['edad']

    correo = request.form['correo']

    materias = request.form['materias']


    nuevo_alumno = [nombre, edad, correo, materias]

    alumnos = leer_alumnos()

    alumnos.append(nuevo_alumno)

    escribir_alumnos(alumnos)


    return redirect(url_for('index'))


@app.route('/editar/<int:index>', methods=['GET', 'POST'])

def editar(index):

    alumnos = leer_alumnos()


    if request.method == 'POST':

        alumnos[index] = [

            request.form['nombre'],

            request.form['edad'],

            request.form['correo'],

            request.form['materias']

        ]

        escribir_alumnos(alumnos)

        return redirect(url_for('index'))


    return render_template('editar.html', index=index, alumno=alumnos[index])


@app.route('/eliminar/<int:index>')

def eliminar(index):

    alumnos = leer_alumnos()

    alumnos.pop(index)

    escribir_alumnos(alumnos)

    return redirect(url_for('index'))


if __name__ == '__main__':

    app.run(debug=True)


🔹 Archivo templates/index.html


<!DOCTYPE html>

<html lang="es">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Gestión de Alumnos</title>

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">

</head>

<body class="bg-light">

    <div class="container mt-5">

        <h2 class="text-center">Gestión de Alumnos</h2>


        <form action="/agregar" method="POST" class="card p-4 shadow mb-4">

            <div class="mb-3">

                <label for="nombre" class="form-label">Nombre</label>

                <input type="text" class="form-control" id="nombre" name="nombre" required>

            </div>

            <div class="mb-3">

                <label for="edad" class="form-label">Edad</label>

                <input type="number" class="form-control" id="edad" name="edad" required>

            </div>

            <div class="mb-3">

                <label for="correo" class="form-label">Correo Electrónico</label>

                <input type="email" class="form-control" id="correo" name="correo" required>

            </div>

            <div class="mb-3">

                <label for="materias" class="form-label">Número de Materias</label>

                <input type="number" class="form-control" id="materias" name="materias" required>

            </div>

            <button type="submit" class="btn btn-primary">Agregar Alumno</button>

        </form>


        <table class="table table-bordered">

            <thead>

                <tr>

                    <th>Nombre</th>

                    <th>Edad</th>

                    <th>Correo</th>

                    <th>Materias</th>

                    <th>Acciones</th>

                </tr>

            </thead>

            <tbody>

                {% for index, alumno in alumnos %}

                <tr>

                    <td>{{ alumno[0] }}</td>

                    <td>{{ alumno[1] }}</td>

                    <td>{{ alumno[2] }}</td>

                    <td>{{ alumno[3] }}</td>

                    <td>

                        <a href="/editar/{{ index }}" class="btn btn-warning btn-sm">Editar</a>

                        <a href="/eliminar/{{ index }}" class="btn btn-danger btn-sm">Eliminar</a>

                    </td>

                </tr>

                {% endfor %}

            </tbody>

        </table>

    </div>

</body>

</html>


🔹 Archivo templates/editar.html


<!DOCTYPE html>

<html lang="es">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Editar Alumno</title>

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">

</head>

<body class="bg-light">

    <div class="container mt-5">

        <h2 class="text-center">Editar Alumno</h2>

        <form action="/editar/{{ index }}" method="POST" class="card p-4 shadow">

            <div class="mb-3">

                <label class="form-label">Nombre</label>

                <input type="text" class="form-control" name="nombre" value="{{ alumno[0] }}" required>

            </div>

            <div class="mb-3">

                <label class="form-label">Edad</label>

                <input type="number" class="form-control" name="edad" value="{{ alumno[1] }}" required>

            </div>

            <div class="mb-3">

                <label class="form-label">Correo</label>

                <input type="email" class="form-control" name="correo" value="{{ alumno[2] }}" required>

            </div>

            <div class="mb-3">

                <label class="form-label">Materias</label>

                <input type="number" class="form-control" name="materias" value="{{ alumno[3] }}" required>

            </div>

            <button type="submit" class="btn btn-primary">Guardar Cambios</button>

        </form>

    </div>

</body>

</html>




No hay comentarios