Skip to content
Lucas2k

Lucas2k

Applying machine learning to the world, Blockchain entusiast. Developer, husband and dad.

Tag: jinja2

Posted on 4 Septiembre, 201918 Octubre, 2020

Trasteando con Flask

Hace unas semanas me tope con un pequeño proyecto en Flask, framework python del cual solo tenia conocimiento por nombre y hoy quiero compartir lo poco que he aprendido. Pasando desde el manejo para renderear los templates, como trabaja con las rutas, un poco de autenticacion, manejo de formularios, etc.

Introducción

Primero como dicen Flask es un microframework, tenemos lo justo y necesario para empezar a crear una aplicación web o un servicio, pero podemos aumentar las funcionalidad con los plugins. Esto me parece una gran ventaja porque no vamos a estar descargando e instalando cosas innecesarias.

A Continuación algunos plugins que he probado:

  • flask-Bootstrap: Hojas de estilo para la página con este conocido framework ccs.
  • flask-WTF: Sirve para generar formularios de HTML con clases y objetos.
  • flask-Sqlalchemy: Sirve para poder generar el modelo de datos.
  • flask-login: Sirve para la autenticación de usuario y contraseña.
  • flask-testing: Como su nombre lo dice sirve para crear nuestros sets de test.

Como recomendación todos los plugins los pondremos en un archivo requeriments.txt para poder desde consola instalarlas con el comando pi install requeriments.txt.

b1
plugins que se instalaran

Enrutamiento: Rutas y Métodos

Las rutas en Flask se pueden definir utilizando el decorador route, cuando la aplicación recibe una solicitud de una URL que coincide con esta cadena, se invocara la función decorada.

b2
decorador route en flask

Trabajando con peticiones HTTP

Cuando la URL que accedemos corresponde con una ruta se ejecuta la función correspondiente y desde esa función se puede acceder al objeto request que posee toda la información de la petición. Algunos de los atributos mas importantes del objeto request serian request.args (Parámetros con información que vienen desde la URL en las peticiones GET), request.files (Ficheros para subir al servidor),  request.header (Las cabeceras de la petición HTTP),  etc.

  • Si queremos devolver una respuesta HTTP de error podemos utilizar la función abort.
  • Si queremos una redireccion HTTP podemos utilizar la función redirect.

Plantillas con Jinja2

Para renderizar una plantilla creada con Jinja2 simplemente hay que hacer uso del método render_template() . A este método debemos pasarle el nombre de nuestra plantilla y las variables necesarias para su renderizado como parámetros clave-valor. Es importante crear los archivos en  el directorio templates de nuestro proyecto.

b5
templates en flask

Herencia de plantillas

Las plantillas de jinja2 soportan las declaraciones de control dentro de los bloques {% .. %}, en este ejemplo hago uso de una condicional IF para ocultar y mostrar ciertas cosas, pero podemos incluso ir mas aya, podemos reutilizar porciones de vistas y cargarlas en otras plantillas, esto es simple con la declaración de control block.

El bloque extends establece el enlace de herencia entre las dos plantillas, para que jinja2 sepa que necesita tomar hello.html también debe de incluir base.html.

Como ultima acotación no se nos deben de olvidar de cerrar las declaraciones, o sino tendremos un error al renderizar los templates.

b4.png
herencia de templates en jinja2

Generando formularios con flask-wtf

Flask y WTForms. Permiten la creación y administración más sencilla de formularios web, genera automáticamente un campo oculto de token CRSF en sus plantillas (para protegernos contra ataques Cross Site Request Forgey). También cuenta con funciones de validación de forma rápida y fácil.

b3
WTForms login en flask

Gestión de usuarios con flask-login

Si queremos tener un login en nuestra aplicación debemos crear una instancia de la clase LoginManager, la cuál debe ser accesible desde cualquier punto de nuestra aplicación. Esta clase contiene la lógica para cargar un usuario a partir del ID guardado en la sesión o redirigir a los usuarios que no están autenticados a la página de login cuando intentan acceder a una vista protegida.

Dado que Flask-login hace uso de la sesión para la autenticación, debemos establecer la variable de configuración SECRET_KEY.

b6
flask-login

Despliegue

Para la parte del despliegue me gusto mucho este tutorial  (coloco en enlace para no hacer mas largo este post), yo lo seguí y no tuve ningún problema.

Se que estoy tocando solo lo superficial de este fantástico framework, pero con lo que he visto y probado me ha quedado mas que suficiente en considerarlo en futuros proyectos.

Saludos.

Entradas recientes

  • Como Subir archivos a Minio Storage desde Kotlin
  • Como simular fiebre y calibrar cámaras térmicas desde Android
  • Trasteando con Flask
  • Cliente RTMP Streaming desde Aplicacion Xamarin Forms
  • Remix: Aprendiendo a desarrollar tu primer Smart Contract para la Blockchain Ethereum

Categorías

  • BLOCKCHAIN
  • Devops
  • IA
  • Móvil
  • Web
  • Xamarin Forms

¡Escribeme!

Tweet to @Lucas____27