Go con Gin, el mega tutorial (III)

¿Nómadas preparados para más Golang? Pues vamos a ello. En la entrada de hoy vamos a hablar de los formularios web y como podemos integrarlos en Go.

Índice de la serie

Si habéis llegado aquí por casualidad, podéis ver las entradas anteriores para seguir el hilo del post.

 

Formularios web

Lo cierto que los formularios son la forma más habitual que hay en las aplicaciones web para que los usuarios se comuniquen con el servidor o aplicaciones web. Así que debemos conocer como leer la información que nos ofrecen los usuarios y para ello partiremos del código HTML hasta el código en el servidor.

El primer formulario que vamos a implementar es el de acceso o login. Se trata de un formulario sencillo con dos campos, uno para el nombre de usuario y otro para la contraseña, así podremos coger los conceptos fácilmente y mucho más rápido.

Como hemos dicho vamos a empezar por el código HTML. Lo que debemos hacer es reemplazar el contenido de la plantilla index.html por el formulario de login, más adelante reorganizaremos el código, pero por ahora lo dejamos así para poder explicar los conceptos.

Formulario de login

Nosotros hemos usado un formulario sencillo para hacer el login, más adelante ya lo decoraremos y lo haremos bonito.

Ya está, sencillo ¿verdad? Bueno, más adelante modificaremos un poco más de código HTML, pero por el momento no necesitamos más.

Te puede interesar  Go con Gin, el mega tutorial (VI)

Ahora tenemos que centrar el foco en el servidor.

Lo primero que vamos hacer es quitar el handler holaMundo. Pues nos vamos a focalizar en ir desarrollando el código final de goblog. En su lugar ponemos el handler indexFn para renderizar la plantilla index.html.

Hasta aquí tenemos suficiente como para ver como luce nuestro nuevo formulario. Ejecutamos el servidor con go run cmd/goblog/main.go y accedemos a http://127.0.0.1:8000.

Añadiendo rutas (Handlers)

Si probáis a hacer clic en el botón veréis como obtenéis un error HTTP 404. Si lo pensáis un momento, es lo más lógico, pues no hemos dicho en ningún sitio donde se tiene que procesar la petición del formulario. Así que añadiremos la nueva ruta en el servidor para poder procesar el login.

Lo que hemos hecho ha sido añadir la ruta en la función RegisterRoutes. La ruta es de tipo POST y GET( ahora explicamos lo del GET), pues es el método HTTP que se utiliza en los formularios web para enviarlos hacia el servidor. La URI a procesar es la que hemos utilizado en el formulario web, /login. Por último, indicamos el handler que procesará la petición del formulario.

Hemos añadido una ruta de tipo GET para poder mostrar el formulario en caso que los usuarios quieran acceder directamente al mismo. Básicamente renderizará el formulario de login en el nevegador.

Para ahorrar en handlers utilizaremos el mismo, loginFn, para procesar ambas rutas GET y POST.

Representación interna del formulario

Ahora hay que indicar de algún modo como representar los campos introducidos en el formulario en Go. Pues bien, la forma de hacerlo es utilizando un tipo estructurado junto a unos struct tags.

La estructura que vamos a usar es la siguiente:

Lo más importante de código que mostramos son los struct tags. Con ellos le estamos diciendo a Gin que cuando venga algo por un formulario web, como es el caso, asocie el campo del formulario con el correspondiente campo en la estructura. Así el campo username se almacenará en Username y el campo password se almacenará en Password.

Para indicar qué campos se corresponden con los especificados en las struct tags debemos usar el atributo name disponible en los componentes HTML.

Además de indicar como se relacionan los campos del formulario con la estructura, hemos indicado que el “binding” o la relación sea requerida o obligatoria. Así si un usuario no introduce ambos valores en el formulario éste no podrá ser validado y podremos mostrar un mensaje de error.

Te puede interesar  Telegram bots en golang

Para notificar al usuario de los errores podemos utilizar mensajes flash, éstos no son más que pequeños mensajes que se pueden guardar en la cookie o en la sesión del usuario. Pero lo veremos más adelante, ya que es un tema más avanzado. Por ahora enviaremos un mensaje de error igual que hacemos para enviar el titulo de la página.

Plantilla base

Eso si, deberemos de adaptar la plantilla para poder procesar los nuevos mensajes de error. Nosotros hemos modificado la plantilla base.html y nos ha quedado así.

Por último, nos queda procesar el formulario. Esto significa validar que los datos introducidos por el usuario son correctos y válidos para guardarlos en la base de datos o trabajar con los mismos.

Validar el formulario

La validación se realiza de modo automático utilizando el método ShouldBind del contexto de Gin. Como ya hemos explicado antes, la validación automática se hace ajustando el struct tag. Podemos usar validaciones ya definidas o crear nuevas. Si estáis interesados en conocer como funciona podéis visitar validator. Nosotros iremos explicándolo cuando sea necesario.

En el código de arriba podéis ver como queda el handler del login. Nos queda por implementar que hacer cuando se han introducido los datos correctos, pero eso ya lo veremos en posteriores entradas. Ahora podéis practicar a crear nuevos handlers, nuevas rutas o más plantillas.

Go con Gin, el mega tutorial (III)
Etiquetado en:                 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *