Templates
Templates
base.html
static/css/styles.css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Título de tu aplicación</title>
<!-- Agregar enlaces a los estilos CSS de Bootstrap -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
>
<!-- Agregar enlace a tu propio archivo CSS personalizado -->
<link rel="stylesheet" href="/static/css/styles.css">
</head>
<body>
</body>
</html>
Index.html
{% extends 'base.html' %}
{% block content %}
<div class="container">
<div class="row">
<div class="col-lg-10 offset-lg-1"> <!-- Cambiado de col-lg-8 a col-
lg-10 -->
<!-- Agregar un formulario de búsqueda -->
<form action="/" method="get" class="mb-3">
<div class="input-group">
<input type="text" name="search" id="search"
class="form-control" placeholder="Buscar..." value="{{ search }}">
<div class="input-group-append">
<button type="submit" class="btn btn-
primary">Buscar</button>
<button type="button" class="btn btn-secondary"
onclick="clearSearch()">Limpiar</button>
</div>
</div>
</form>
<script>
function clearSearch() {
document.getElementById('search').value = '';
}
</script>
{% endblock content %}
Agregar.html
{% extends 'base.html' %}
{% block content %}
<div class="row justify-content-center">
<div class="col-lg-6 col-md-8 col-sm-10">
<form action="/agregar" method="post">
<div class="mb-3">
<label>Nombre</label>
<input type="text" name="nombre" placeholder="Nombre"
class="form-control" />
</div>
<div class="mb-3">
<label>Cargo</label>
<input type="text" name="cargo" placeholder="Cargo"
class="form-control" />
</div>
<div class="mb-3">
<label>Especialidad</label>
<input type="text" name="especialidad"
placeholder="Especialidad" class="form-control" />
</div>
<input type="submit" value="Guardar" class="btn btn-danger mb-
3"/>
</form>
<!-- Botón para regresar -->
<button onclick="goBack()" class="btn btn-
secondary">Regresar</button>
</div>
</div>
<script>
function goBack() {
window.history.back();
}
</script>
{% endblock %}
Editar.html
{% extends 'base.html' %}
{% block content %}
{% endblock content %}
Database.py
DB_URL = 'sqlite:///mierda.sqlite3'
Main.py
def get_db():
db = sessionlocal()
try:
yield db
finally:
db.close()
@app.get("/")
async def home(
request: Request,
page: int = Query(default=1, ge=1),
per_page: int = Query(default=5, le=100),
search: str = Query(default="", alias=""),
db: Session = Depends(get_db)
):
# Consulta de estudiantes
estudiantes_query = db.query(models.Estudiante)
@app.post("/agregar")
async def agregar(request: Request, nombre: str = Form(...), cargo: str =
Form(...), especialidad: str = Form(...), db: Session = Depends(get_db)):
try:
# Crear un nuevo estudiante en la base de datos
estudiante = models.Estudiante(
nombre=nombre, cargo=cargo, especialidad=especialidad)
db.add(estudiante)
db.commit()
except Exception as e:
# Manejar excepciones (por ejemplo, errores de base de datos) de
manera apropiada
return {"error": str(e)}
# Redirigir a la página principal después de agregar el estudiante
return RedirectResponse(url=app.url_path_for("home"),
status_code=status.HTTP_303_SEE_OTHER)
@app.get("/agregar_nuevo")
async def agregar_nuevo(request: Request):
return templates.TemplateResponse("agregar.html", {"request": request})
@app.get("/editar/{estudiante_id}")
async def editar(request: Request, estudiante_id: int, db: Session =
Depends(get_db)):
estudiante = db.query(models.Estudiante).filter(
models.Estudiante.id == estudiante_id).first()
return templates.TemplateResponse("editar.html", {"request": request,
"estudiante": estudiante})
@app.post("/actualizar/{estudiante_id}")
async def actualizar(request: Request, estudiante_id: int, nombre: str =
Form(...), cargo: str = Form(...), especialidad: str = Form(...), db:
Session = Depends(get_db)):
estudiante = db.query(models.Estudiante).filter(
models.Estudiante.id == estudiante_id).first()
estudiante.nombre = nombre
estudiante.cargo = cargo
estudiante.especialidad = especialidad
db.commit()
return RedirectResponse(url=app.url_path_for("home"),
status_code=status.HTTP_303_SEE_OTHER)
@app.get("/eliminar/{estudiante_id}")
async def eliminar(request: Request, estudiante_id: int, db: Session =
Depends(get_db)):
# Obtener el estudiante de la base de datos por su ID
estudiante = db.query(models.Estudiante).filter(
models.Estudiante.id == estudiante_id).first()
# Eliminar el estudiante de la base de datos
db.delete(estudiante)
db.commit()
# Redirigir a la página principal después de eliminar el estudiante
return RedirectResponse(url=app.url_path_for("home"),
status_code=status.HTTP_303_SEE_OTHER)
Models.py
def __repr__(self):
return '<Estudiante %r>' % (self.id)