Revista Informática

Django desde Cero: Validaciones de formulario

Publicado el 16 octubre 2013 por Codehero @codeheroblog

¡Alerta!

Todos los ejemplos usados en el tutorial de son una continuación de los ejemplos del capitulo anterior.


¿Qué es una validación de formulario en Django?

Los validadores son funciones simples que toman un solo argumento y disparan un ValidationError en el caso de que una entrada sea no válida. Estos nos sirven para crear alarmas cuando los usuarios insertan información errónea en los campos de un formulario de nuestra app.


¿Cómo crear un validador en Django?

Supongamos que queremos validar los campos autor, fecha, texto y titulo que tenemos disponible en nuestro modelo Articulo, recordemos que estamos utilizando el ejemplo que dejamos en el capitulo anterior urls avanzadas.

Lo primero que tenemos que hacer es declarar un método dentro de la misma clase (ArticuloForm), en donde definiremos toda nuestra lógica de validación para un campo del formulario en especifico. Vamos a empezar por validar el campo del autor. Para eso vamos a agregar la siguiente función al archivo forms.py dentro de nuestra app blog.

def clean_autor(self): diccionario_limpio = self.cleaned_data autor = diccionario_limpio.get('autor') if len(autor) < 3: raise forms.ValidationError("El autor debe contener mas de tres caracteres") return autor

123456789    def clean_autor(self):  diccionario_limpio=selfcleaned_data    autor=diccionario_limpioget('autor')   iflen(autor)<3:   raise formsValidationError("El autor debe contener mas de tres caracteres")   returnautor  

Observemos lo siguiente:

  • Por convención debemos denominar nuestro método con el prefijo clean seguido del nombre del campo. En nuestro caso seria clean_autor.
  • Siempre debemos obtener el diccionario de data que proviene del formulario de manera limpia, para eso utilizamos la siguiente instrucción diccionario_limpio = self.cleaned_data.
  • Una vez que obtengamos el diccionario debemos obtener el campo que queremos validar. Eso lo hacemos con la siguiente instrucción autor = diccionario_limpio.get('autor'). En nuestro caso debemos retornar autor.
  • Seguido, generamos la validación, si queremos validar que el autor no puede tener menos de 3 letras usamos if len(autor) < 3:. Si el campo posee mas de 3 caracteres levantamos un ValidationError a través de raise forms.ValidationError("El autor debe contener mas de tres caracteres").
  • Por último, necesitamos retornar el campo validado como tal.

Este mismo procedimiento debemos usarlo con todos los campos que queramos validar. Para no extender el tutorial y dejarlo lo mas simple posible les voy a dejar el archivo completo con todas las validaciones necesarias para verificar todos los campos que venimos usando.

from django import forms from models import Articulo from django.utils import timezone class ArticuloForm(forms.ModelForm): class Meta: model = Articulo #Validamos que el autor no sea menor a 3 caracteres def clean_autor(self): diccionario_limpio = self.cleaned_data autor = diccionario_limpio.get('autor') if len(autor) < 3: raise forms.ValidationError("El autor debe contener mas de tres caracteres") return autor #Validamos que el titulo no sea mayor a 50 caracteres def clean_titulo(self): diccionario_limpio = self.cleaned_data titulo = diccionario_limpio.get('titulo') if len(titulo) > 50: raise forms.ValidationError("El titulo debe ser menor a 50 caracteres") return titulo #Validamos que el texto no sea mayor a 400 caracteres def clean_texto(self): diccionario_limpio = self.cleaned_data texto = diccionario_limpio.get('texto') if len(texto) > 400: raise forms.ValidationError("El texto no debe estar vacio") return texto #Validamos que la fecha no sea mayor a la fecha actual def clean_fecha(self): diccionario_limpio = self.cleaned_data fecha_articulo = diccionario_limpio.get('fecha') #Obtenemos la fecha actual fecha_actual = timezone.now() if fecha_actual < fecha_articulo: raise forms.ValidationError("El fecha no debe ser mayor al dia de hoy") return fecha_articulo

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 from django import formsfrom models import Articulo from djangoutils import timezone     classArticuloForm(formsModelForm):    classMeta:  model=Articulo    #Validamos que el autor no sea menor a 3 caracteres   def clean_autor(self):  diccionario_limpio=selfcleaned_data    autor=diccionario_limpioget('autor')   iflen(autor)<3:   raise formsValidationError("El autor debe contener mas de tres caracteres")   returnautor       #Validamos que el titulo no sea mayor a 50 caracteres   def clean_titulo(self):  diccionario_limpio=selfcleaned_data    titulo=diccionario_limpioget('titulo')   iflen(titulo)>50:   raise formsValidationError("El titulo debe ser menor a 50 caracteres")   returntitulo    #Validamos que el texto no sea mayor a 400 caracteres   def clean_texto(self):  diccionario_limpio=selfcleaned_data    texto=diccionario_limpioget('texto')   iflen(texto)>400:   raise formsValidationError("El texto no debe estar vacio")   returntexto       #Validamos que la fecha no sea mayor a la fecha actual   def clean_fecha(self):  diccionario_limpio=selfcleaned_data    fecha_articulo=diccionario_limpioget('fecha')   #Obtenemos la fecha actual  fecha_actual=timezonenow()   iffecha_actual<fecha_articulo:   raise formsValidationError("El fecha no debe ser mayor al dia de hoy")   returnfecha_articulo  


Probemos nuestras validaciones

Para poder probar nuestras validaciones debemos encender nuestro servidor y navegar al formulario http://127.0.0.1:8000/crear/ para crear un articulo. Si no sabes como arrancar el servidor te invito a que visites Django Instalación y Herramientas.

Supongamos que colocamos datos erróneos en los campos, debería aparecernos lo siguiente:

Como pueden observar se validaron todos los campos respectivos.

Ahora si colocamos datos correctos:

Podemos observar que se guardo exitosamente el articulo.

Si quieres saber mayor información sobre validadores en Django vista Uso de validadores en Django


Conclusión

En esta lección, aprendimos como crear validadores de formularios. Los validadores nos ayudan a prevenir información errónea en nuestra app. Si tienes alguna pregunta, yo estaré feliz de responderte en los comentarios, además espero que te unas y le eches un vistazo a todo el resto de este curso.

¡Te espero la próxima semana!


Volver a la Portada de Logo Paperblog