- Configuarar el entorno virutal Windows-> python -m venv env | macOS-> python3 -m venv env
- Activar Entorno Virtual Windows-> call env/scripts/activate | macOS-> source env/bin/activate
- Crear requirements -> con los módulos a instalar
- Instalar módulos -> pip install -r requirements.txt
- Para el correcto funcionamiento de la API: cd src // flask --app app.py --debug run
-- Estructura de tablas
CREATE TABLE peliculas (
codigo INTEGER PRIMARY KEY,
genero VARCHAR(20),
edad INTEGER,
director VARCHAR(20),
titulo VARCHAR(20)
);
-- Datos por defecto
INSERT INTO peliculas VALUES
(1, 'Acción', 15, 'Nolan', 'Inception'),
(2, 'Drama', 16, 'Coppola', 'El padrino'),
(3, 'Comedia', 12, 'Allen', 'Manhattan'),
(4, 'Suspense', 14, 'Fincher', 'Seven'),
(5, 'Terror', 18, 'Carpenter', 'Halloween'),
(6, 'Ciencia ficción', 17, 'Kubrick', '2001'),
(7, 'Romance', 13, 'Allen', 'Hitch'),
(8, 'Aventura', 16, 'Scott', 'Gladiator'),
(9, 'Fantasía', 16, 'Jackson', 'LOTR'),
(10, 'Animación', 10, 'Spielberg', 'Shrek');
-- Resultados
SELECT * FROM peliculas;
-
form action="...": Define a qué ruta de la API se enviarán los datos.
-
method="post": Especifica que se usarán los datos del formulario con POST.
-
Cada input tiene un name que corresponde con las claves que Flask recogerá para acceder al campo en cuestión.
-
Importamos el request para poder acceder a los datos del formulario.
-
La carpeta static se ha creado para poder mostrar la imagen de fondo de la página del formulario, ya que, si no, me saltaba el ERROR: 404..
-
with open("HTML/index.html", encoding = "utf-8") as f: abre el archivo html que está en la carpeta HTML, llamado index.html.
-
with: abre archivos de forma segura y controlada(cierre automático).
-
encoding = "utf-8": permite leer los caracteres especiales (áéíóú o ñ).
-
as f: guarda el archivo en la variable f.
-
return f.read: lee todo el contenido del arxchivo f.read(), luego devuelve el html com respuesta al navegador y el Flask lo muestra como si fuera una página web.
-
request.form.get(""): recoge el valor de lo que se encuentra entre las comillas, en este caso, codigo, edad, genero... del formulario.
-
SQLiteConnection y conexion.execute_query ejecuta la base de datos usando mi clase personalizada.
Esta ruta permite mostrar todas las películas registradas en la base de datos. Además, se pueden aplicar filtros opcionales mediante parámetros en la URL, como por ejemplo:
codigo
genero
edad
director
titulo
Ejemplo de uso:
/mostrar?genero=Acción&edad=18
Esto mostrará solo las películas del género "Acción" recomendadas para mayores de 18 años.
¿Qué hace esta ruta por dentro?
- Usa líneas como
request.args.get("codigo")
para recoger los filtros desde la URL. Si por ejemplo accedes a/mostrar?codigo=5
, con esa línea se obtiene el valor5
. - Va añadiendo condiciones a la consulta SQL dependiendo de los filtros que vayas poniendo. Por ejemplo, si pones solo la edad, buscará solo por la edad.
- Usa la clase
SQLiteConnection
para conectarse a la base de datos y poder ejecutar la consulta. - Muestra los resultados en la plantilla
mostrar.html
.
Esta ruta borra una película concreta. Solo con poner su código en la URL. Ejemplo:
/eliminar/12
Esto eliminará la película con código 12
.
¿Qué hace esta ruta por dentro?
- El valor
<codigo>
se recoge directamente de la URL como variable. - Se ejecuta la consulta
DELETE
usando el código para borrar la película. - Se guardan los cambios en la base de datos con
commit=True
. - Te redirige automáticamente a la ruta
/mostrar
para ver el listado actualizado.
if __name__ == "__main__" application.run(debug=True)
: Inicia la app Flask, realizandose la carga automática y mensajes de error.
- https://realpython.com/ (Documentación oficial Flask)
- https://flask.palletsprojects.com/en/latest/patterns/wtforms/ (Flask y formularios)
- https://flask.palletsprojects.com/en/latest/api/#flask.Request.form (Para request.form.get())
- https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files (Manejo de archivos en Python with open)
- https://stackoverflow.com/
- https://realpython.com/
- https://flask.palletsprojects.com/