En este módulo, aprenderemos cómo manejar formularios en Django. Los formularios son una parte esencial de cualquier aplicación web, ya que permiten a los usuarios enviar datos al servidor. Django proporciona una forma robusta y flexible de manejar formularios a través de su módulo django.forms.

Contenido

Introducción a los Formularios en Django

Django proporciona dos formas principales de trabajar con formularios:

  • Formularios regulares: Utilizando la clase forms.Form.
  • Formularios basados en modelos: Utilizando la clase forms.ModelForm.

Ambos enfoques tienen sus propias ventajas y se utilizan en diferentes escenarios.

Creación de Formularios

Formularios Regulares

Para crear un formulario regular, debes definir una clase que herede de forms.Form y agregar los campos que necesites. Aquí hay un ejemplo básico:

# forms.py
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(label='Your name', max_length=100)
    email = forms.EmailField(label='Your email')
    message = forms.CharField(widget=forms.Textarea, label='Your message')

Formularios Basados en Modelos

Los formularios basados en modelos son útiles cuando deseas crear un formulario que interactúe directamente con un modelo de Django. Aquí hay un ejemplo:

# models.py
from django.db import models

class Contact(models.Model):
    name = models.CharField(max_length=100)
    email = models.EmailField()
    message = models.TextField()

# forms.py
from django import forms
from .models import Contact

class ContactModelForm(forms.ModelForm):
    class Meta:
        model = Contact
        fields = ['name', 'email', 'message']

Validación de Formularios

Django proporciona validación automática para los formularios. Puedes agregar validaciones personalizadas mediante métodos clean_<fieldname> en la clase del formulario.

# forms.py
class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

    def clean_email(self):
        email = self.cleaned_data.get('email')
        if not email.endswith('@example.com'):
            raise forms.ValidationError('Email must be from the domain @example.com')
        return email

Procesamiento de Formularios en Vistas

Para procesar un formulario en una vista, debes manejar tanto las solicitudes GET (para mostrar el formulario) como las solicitudes POST (para procesar los datos enviados).

# views.py
from django.shortcuts import render, redirect
from .forms import ContactForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # Procesar los datos del formulario
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            # Aquí podrías guardar los datos en la base de datos o enviar un correo electrónico
            return redirect('success')
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

Formularios Basados en Modelos

Los formularios basados en modelos simplifican el proceso de creación y validación de formularios que están directamente relacionados con un modelo de Django.

# views.py
from django.shortcuts import render, redirect
from .forms import ContactModelForm

def contact_view(request):
    if request.method == 'POST':
        form = ContactModelForm(request.POST)
        if form.is_valid():
            form.save()  # Guarda los datos directamente en la base de datos
            return redirect('success')
    else:
        form = ContactModelForm()
    return render(request, 'contact.html', {'form': form})

Ejercicio Práctico

Ejercicio 1: Crear un Formulario de Registro de Usuario

  1. Crear el modelo de usuario:

    # models.py
    from django.db import models
    
    class User(models.Model):
        username = models.CharField(max_length=100)
        email = models.EmailField()
        password = models.CharField(max_length=100)
    
  2. Crear el formulario basado en el modelo:

    # forms.py
    from django import forms
    from .models import User
    
    class UserRegistrationForm(forms.ModelForm):
        class Meta:
            model = User
            fields = ['username', 'email', 'password']
            widgets = {
                'password': forms.PasswordInput(),
            }
    
  3. Crear la vista para manejar el formulario:

    # views.py
    from django.shortcuts import render, redirect
    from .forms import UserRegistrationForm
    
    def register_view(request):
        if request.method == 'POST':
            form = UserRegistrationForm(request.POST)
            if form.is_valid():
                form.save()
                return redirect('success')
        else:
            form = UserRegistrationForm()
        return render(request, 'register.html', {'form': form})
    
  4. Crear la plantilla para el formulario:

    <!-- register.html -->
    <!DOCTYPE html>
    <html>
    <head>
        <title>Register</title>
    </head>
    <body>
        <h2>Register</h2>
        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Register</button>
        </form>
    </body>
    </html>
    

Solución del Ejercicio

La solución del ejercicio se encuentra en los pasos anteriores. Asegúrate de seguir cada paso y verificar que tu aplicación funcione correctamente.

Conclusión

En este módulo, hemos aprendido cómo manejar formularios en Django, desde la creación y validación hasta el procesamiento en vistas. También hemos visto cómo utilizar formularios basados en modelos para simplificar la interacción con la base de datos. Los formularios son una herramienta poderosa en Django y dominar su uso te permitirá crear aplicaciones web más interactivas y funcionales.

En el próximo módulo, exploraremos las vistas basadas en clases, que proporcionan una forma más estructurada y reutilizable de manejar las vistas en Django.

© Copyright 2024. Todos los derechos reservados