Michel Rosales Python Fastapi
Michel Rosales Python Fastapi
templates
base.html
_____________________________________________________________________________
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Título de tu aplicación</title>
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
</nav>
</div>
<!-- Agregar los scripts de JavaScript de Bootstrap al final del documento para mejorar la velocidad
de carga -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js"></
script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
index.html
_________________________________________________________
{% extends 'base.html' %}
{% block content %}
<div class="container">
<div class="row">
<div class="input-group">
<div class="input-group-append">
</div>
</div>
</form>
</div>
<div class="table-responsive">
<tr>
<th>ID</th>
<th>Nombre</th>
<th>Cargo</th>
<th>Especialidad</th>
<th class="text-center">Acción</th>
</tr>
</thead>
<tbody>
{% for rs in estudiantes %}
<tr>
<td class="text-center">
</div>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
<!-- Agregar enlaces de paginación -->
</li>
{% endfor %}
</ul>
</nav>
</div>
</div>
</div>
<script>
function clearSearch() {
document.getElementById('search').value = '';
</script>
{% endblock content %}
agregar.html
________________________________________________
{% extends 'base.html' %}
{% block content %}
<div class="mb-3">
<label>Nombre</label>
</div>
<div class="mb-3">
<label>Cargo</label>
</div>
<div class="mb-3">
<label>Especialidad</label>
</div>
</form>
</div>
</div>
<script>
function goBack() {
window.history.back();
}
</script>
{% endblock %}
editar.html
__________________________________
{% extends 'base.html' %}
{% block content %}
<div class="mb-3">
<label for="nombre">Nombre</label>
</div>
<div class="mb-3">
<label for="cargo">Cargo</label>
</div>
<div class="mb-3">
<label for="especialidad">Especialidad</label>
</div>
<input type="submit" value="Actualizar" class="btn btn-primary mb-3"/>
</form>
{% endblock content %}
static/css/styles.css
styles.css
body{
database.py
_________________________________________
Base = declarative_base()
main.py
_____________________________________________
import models
models.Base.metadata.create_all(bind=engine)
templates = Jinja2Templates(directory="templates")
# Inicializar la aplicación FastAPI
app = FastAPI()
def get_db():
db = sessionlocal()
try:
yield db
finally:
db.close()
@app.get("/")
request: Request,
):
# Consulta de estudiantes
estudiantes_query = db.query(models.Estudiante)
if search:
estudiantes_query = estudiantes_query.filter(
or_(
models.Estudiante.nombre.ilike(f"%{search}%"),
models.Estudiante.cargo.ilike(f"%{search}%"),
models.Estudiante.especialidad.ilike(f"%{search}%"),
# Realizar paginación
estudiantes = estudiantes_query.offset(
(page - 1) * per_page).limit(per_page).all()
@app.post("/agregar")
async def agregar(request: Request, nombre: str = Form(...), cargo: str = Form(...), especialidad: str
= Form(...), db: Session = Depends(get_db)):
try:
estudiante = models.Estudiante(
db.commit()
except Exception as e:
return RedirectResponse(url=app.url_path_for("home"),
status_code=status.HTTP_303_SEE_OTHER)
@app.get("/agregar_nuevo")
@app.get("/editar/{estudiante_id}")
estudiante = db.query(models.Estudiante).filter(
models.Estudiante.id == estudiante_id).first()
@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}")
estudiante = db.query(models.Estudiante).filter(
models.Estudiante.id == estudiante_id).first()
db.delete(estudiante)
db.commit()
return RedirectResponse(url=app.url_path_for("home"),
status_code=status.HTTP_303_SEE_OTHER)
models.py
_____________________________________________
from sqlalchemy import Column, Integer, String
class Estudiante(Base):
__tablename__ = 'estudiantes'
id = Column(Integer, primary_key=True)
nombre = Column(String(150))
cargo = Column(String(150))
especialidad = Column(String(150))
def __repr__(self):