Afortunadamente dentro de Django podemos crear también la forma en la cual vamos a procesar nuestros formularios y como administrar su lógica, con ello lograremos aplicaciones mucho más personalizadas y cercanas a nuestros objetivos.
Uniendo la data al formulario
Sabemos que el formulario es una forma de tomar datos del usuario, por lo tanto tenemos dos estados del mismo, con datos y sin datos, cuando el formulario tiene datos es cuando vamos a hacer nuestras operaciones, en cambio cuando no tiene nada simplemente lo debemos ignorar para el procesamiento de datos.
Como vemos en el ejemplo solo cuando le pasamos los valores al formulario mientras utilizamos el método is_bound es que obtenemos una respuesta True.
Validar Datos
Como sabemos, si trabajamos en web los datos que ingresa el usuario pueden ser la forma de ataque más efectiva contra nuestra aplicación, esto es debido a que por desconocimiento puede ingresar cualquier tipo de formatos que nuestra aplicación no está lista para aceptar y por ende puede terminar en un error fatal, para evitar esto siempre debemos asegurarnos que la data es segura antes de procesarla para ello podemos utilizar lo siguiente:
def mi_vista(request): if request.method == 'POST': form = MiFormulario(request.POST, request.FILES) if form.is_valid(): #Si la data es válida aquí podemos continuar con nuestra lógica de aplicación else: #De lo contrario solo presentamos el objeto sin datos form = MiFormulario()
Como vemos en el ejemplo hacemos una instancia de la clase MiFormulario y le unimos los datos que vienen en el request, por el método POST y los del tipo FILES en caso que traigamos una imagen o un archivo de otro tipo, dependiendo de nuestro modelo lo que traiga nuestro formulario debe ser evaluado para ello utilizamos el método is_valid(), con esto nos aseguramos que si viene un string donde debería venir un número, se rechace la información y no se deje llegar a la base de datos donde podría causar un error fatal.
Class Based Views
Ya con lo que hemos visto en el ejemplo anterior podemos ahora ver cómo podemos aplicar algo similar utilizando las Class Based Views y de esta forma utilizar las herramientas del framework.
Si utilizamos el FormView genérico de Django podemos lograr algo similar al siguiente código:
from Django.shortcuts import render, redirect from Django.views.generic.edit import FormView class MiFormulario(FormView): form_class = MiFormulario template_name = 'form.html' success_url = '/success/' def form_valid(self, form): form.save() return super(MyView, self).form_valid(form)
Como vemos la utilización avanzada de los formularios nos permite hacer aplicaciones más dinámicas y de forma más personalizada con lo que podemos lograr resultados increíbles con pocas líneas de código.