post thumbnail

Django desde Cero: Validaciones de formulario

Publicado Por: Carlos Picca, El 16/10/2013


Detalles del Curso:

Dificultad: Aprendiz

Duración: 20 min


Bienvenidos una vez más a Django desde Cero, curso en el cual aprendemos a programar sin conocimiento alguno. En el capítulo anterior, te enseñe como crear urls avanzadas las cuales nos servirán para manejar información a través de nuestras apps. Si eres nuevo en este curso, te recomiendo que le eches un vistazo al capítulo anterior para que te pongas en contexto (Capítulo 6 - Urls Avanzadas)

Hoy, vamos a ver como crear validación de formularios. Los validadores nos ayudan a prevenir información errónea en nuestra app.

¡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

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

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:

error-form-validation-django

Como pueden observar se validaron todos los campos respectivos.

Ahora si colocamos datos correctos:

good-form-validation-django

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!


¿Te ha gustado esta publicación?

Compártela:

Por Carlos Picca

Conoce más sobre este autor aquí


comments powered by Disqus