Django: Formularios
Guía completa para trabajar con formularios en Django, desde la generación de estructuras HTML hasta el manejo de validaciones y envío seguro de datos.
Aprende Django GRATIS y certifícateEn Django, los formularios permiten recopilar información de los usuarios y procesarla de forma eficiente. Se combinan buenas prácticas de seguridad, como el uso del token CSRF, con la generación de estructuras HTML claras y fáciles de mantener.
“La gestión de formularios es un pilar básico para cualquier proyecto que requiera interacción con el usuario.”
El framework de Django ofrece una librería específica llamada django.forms
, que facilita la creación de campos y la validación automática de datos. Se promueve una separación entre la capa de presentación HTML y la capa de negocio, manteniendo la lógica de validación en un archivo forms.py
.
Para crear tu primer formulario, basta con definir una clase en forms.py
. En el siguiente ejemplo, verás cómo se definen campos y se aprovecha la validación interna:
from django import forms
class ContactForm(forms.Form):
nombre = forms.CharField(max_length=100)
email = forms.EmailField()
mensaje = forms.CharField(widget=forms.Textarea)
El paso siguiente es incluir este formulario en una vista. Allí podrás gestionar la recepción de datos, mostrarlo en HTML y validar su contenido. Un ejemplo sencillo de vista podría ser:
from django.shortcuts import render
from .forms import ContactForm
def formulario_contacto(request):
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
# Procesar datos
nombre = form.cleaned_data['nombre']
email = form.cleaned_data['email']
mensaje = form.cleaned_data['mensaje']
# Acciones adicionales...
else:
form = ContactForm()
return render(request, 'contacto.html', {'form': form})
El atributo is_valid()
revisa automáticamente los datos enviados por el usuario y, si todo está en orden, podrás acceder a la información mediante cleaned_data
. A su vez, el framework garantiza que el token CSRF proteja el envío de los datos.
A la hora de presentar el formulario en tu plantilla, se suele utilizar la sintaxis del Django Template Language y se incluye la etiqueta csrf_token
:
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Enviar</button>
</form>
Usar {{ form.as_p }}
inserta cada campo con su etiqueta <label>
y su entrada correspondiente. Si prefieres un control más preciso sobre la estructura HTML, puedes recorrer cada campo del formulario manualmente.
Mantener la consistencia en el nombre de las vistas y archivos dedicados a formularios es una práctica recomendada. En proyectos grandes, se opta por organizar múltiples formularios en archivos separados, diferenciando entre formularios de registro, de contacto o de autenticación.
Las validaciones personalizadas se agregan definiendo métodos como clean_campo_especifico
, o sobreescribiendo clean()
para ajustar los mensajes de error y los requerimientos lógicos de tu proyecto. De este modo, puedes asegurar que cada formulario cumpla con las reglas de negocio que se requieran.
Otro aspecto importante es el control de datos sensibles. Dentro del formulario, puedes definir campos obligatorios, longitud máxima y máscaras de formato para garantizar que la información suministrada cumpla con los estándares requeridos por la aplicación.
Finalmente, recuerda que los formularios en Django pueden alimentarse de modelos gracias a la clase ModelForm
, que simplifica todavía más la creación de campos basados en tus modelos. Esto aporta coherencia entre la capa de datos y la de presentación, evitando la duplicidad de definiciones en distintos puntos del proyecto.
Siguiendo estos conceptos, te resultará sencillo estructurar tus formularios HTML, validarlos de manera segura y aprovechar al máximo las herramientas que ofrece Django para la interacción con el usuario.
Lecciones de este módulo de Django
Lecciones de programación del módulo Formularios del curso de Django.
Ejercicios de programación en este módulo de Django
Evalúa tus conocimientos en Formularios con ejercicios de programación Formularios de tipo Test, Puzzle, Código y Proyecto con VSCode.