Creación y Gestión de Formularios con Django

Clase 19 de 32Curso de Django

Resumen

La funcionalidad de formularios en Django permite a los desarrolladores crear, validar y gestionar formularios de manera eficiente y organizada. A continuación, exploraremos cómo crear formularios en Django paso a paso.

¿Cómo se crean formularios en Django?

Para crear un nuevo formulario en Django, primero se debe crear una clase que herede de forms.Form. Esta clase contendrá todos los campos que queremos incluir en el formulario.

  1. Crear el archivo forms.py:
    from django import forms
    
    class ProductForm(forms.Form):
        name = forms.CharField(max_length=200, label='Nombre')
        description = forms.CharField(max_length=300, label='Descripción')
        price = forms.DecimalField(max_digits=10, decimal_places=2, label='Precio')
        available = forms.BooleanField(initial=True, label='Disponible', required=False)
        photo = forms.ImageField(label='Foto', required=False)
    

¿Cómo se manejan los datos del formulario en Django?

Una vez que el formulario está creado, necesitamos definir cómo manejar los datos cuando el usuario envía el formulario. Esto incluye validar los datos y guardarlos en la base de datos.

  1. Método save para guardar datos:
    def save(self):
        from .models import Product
        data = self.cleaned_data
        Product.objects.create(
            name=data['name'],
            description=data['description'],
            price=data['price'],
            available=data['available'],
            photo=data['photo']
        )
    

¿Cómo se crea la vista para el formulario?

La vista conecta el formulario con el template y maneja el request del usuario. Usaremos una vista genérica de Django para simplificar este proceso.

  1. Crear la vista:
    from django.views.generic.edit import FormView
    from django.urls import reverse_lazy
    from .forms import ProductForm
    
    class ProductFormView(FormView):
        template_name = 'products/add_product.html'
        form_class = ProductForm
        success_url = reverse_lazy('product_list')
    
        def form_valid(self, form):
            form.save()
            return super().form_valid(form)
    

¿Cómo se configuran las URLs para la vista?

Es necesario configurar las URLs para que la vista esté accesible desde el navegador.

  1. Configurar urls.py:
    from django.urls import path
    from .views import ProductFormView
    
    urlpatterns = [
        path('add/', ProductFormView.as_view(), name='add_product')
    ]
    

¿Cómo se crea el template para el formulario?

El template define la estructura HTML del formulario y cómo se renderiza en la página web.

  1. Crear el template add_product.html:
    <h1>Agregar Producto</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Agregar</button>
    </form>
    

¿Qué es el CSRF token y por qué es importante?

El CSRF token es una medida de seguridad que protege contra ataques de tipo Cross-Site Request Forgery. Django lo incluye automáticamente en los formularios para asegurar que las solicitudes provengan de fuentes confiables.

¿Cómo se maneja la redirección después de enviar el formulario?

La redirección después del envío del formulario se maneja configurando el parámetro success_url en la vista, utilizando reverse_lazy para obtener la URL de destino.

¿Cómo se valida y guarda el producto?

Cuando el formulario es válido, el método form_valid se encarga de llamar al método save del formulario para guardar el producto en la base de datos.