En aquest tema, aprendrem com gestionar formularis en Django. Els formularis són una part essencial de qualsevol aplicació web, ja que permeten als usuaris enviar dades al servidor. Django proporciona una manera senzilla i poderosa de crear i gestionar formularis.

Continguts

Introducció als Formularis en Django

Django proporciona una classe Form que ens permet crear formularis de manera senzilla. Aquesta classe ens permet definir els camps del formulari, validar les dades i processar-les.

Avantatges d'Utilitzar Formularis en Django

  • Validació Automàtica: Django valida automàticament les dades del formulari.
  • Generació Automàtica d'HTML: Django pot generar el codi HTML del formulari.
  • Integració amb Models: Els formularis es poden integrar fàcilment amb els models de Django.

Creació d'un Formulari

Per crear un formulari en Django, primer hem de definir una classe que hereti de forms.Form. A continuació, definim els camps del formulari com a atributs de la classe.

# forms.py
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(label='Nom', max_length=100)
    email = forms.EmailField(label='Correu Electrònic')
    message = forms.CharField(label='Missatge', widget=forms.Textarea)

Explicació del Codi

  • name: Un camp de text amb una longitud màxima de 100 caràcters.
  • email: Un camp de correu electrònic.
  • message: Un camp de text amb un widget de text àrea.

Validació de Formularis

Django proporciona validació automàtica per a molts tipus de camps. També podem definir validacions personalitzades.

Validació Automàtica

Django valida automàticament els camps segons el seu tipus. Per exemple, un camp EmailField només acceptarà adreces de correu electrònic vàlides.

Validació Personalitzada

Podem afegir validacions personalitzades definint un mètode clean_<fieldname> a la classe del formulari.

# forms.py
from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(label='Nom', max_length=100)
    email = forms.EmailField(label='Correu Electrònic')
    message = forms.CharField(label='Missatge', widget=forms.Textarea)

    def clean_name(self):
        name = self.cleaned_data.get('name')
        if "admin" in name.lower():
            raise forms.ValidationError("El nom no pot contenir 'admin'.")
        return name

Processament de Formularis

Per processar un formulari, hem de gestionar-lo a la vista. Això implica mostrar el formulari, validar les dades i processar-les si són vàlides.

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

def contact_view(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # Processar les dades del formulari
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            # Aquí podríem enviar un correu electrònic, guardar les dades a la base de dades, etc.
            return render(request, 'contact_success.html', {'form': form})
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

Explicació del Codi

  • Si la sol·licitud és POST, creem una instància del formulari amb les dades enviades.
  • Si el formulari és vàlid, processem les dades.
  • Si la sol·licitud és GET, creem una instància buida del formulari.

Exemple Pràctic

Plantilla HTML

<!-- templates/contact.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Contacte</title>
</head>
<body>
    <h1>Formulari de Contacte</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Enviar</button>
    </form>
</body>
</html>

Plantilla d'Èxit

<!-- templates/contact_success.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Contacte</title>
</head>
<body>
    <h1>Formulari Enviat amb Èxit</h1>
    <p>Gràcies per contactar-nos!</p>
</body>
</html>

Exercicis Pràctics

  1. Crear un Formulari de Registre d'Usuari:

    • Crea un formulari amb els camps username, password i email.
    • Afegeix validació personalitzada per assegurar-te que el username no contingui caràcters especials.
  2. Formulari de Comentaris:

    • Crea un formulari amb els camps name, email i comment.
    • Afegeix validació per assegurar-te que el comment tingui almenys 10 caràcters.

Solucions

  1. Formulari de Registre d'Usuari:
# forms.py
from django import forms

class RegistrationForm(forms.Form):
    username = forms.CharField(label='Nom d\'usuari', max_length=100)
    password = forms.CharField(label='Contrasenya', widget=forms.PasswordInput)
    email = forms.EmailField(label='Correu Electrònic')

    def clean_username(self):
        username = self.cleaned_data.get('username')
        if not username.isalnum():
            raise forms.ValidationError("El nom d'usuari només pot contenir lletres i números.")
        return username
  1. Formulari de Comentaris:
# forms.py
from django import forms

class CommentForm(forms.Form):
    name = forms.CharField(label='Nom', max_length=100)
    email = forms.EmailField(label='Correu Electrònic')
    comment = forms.CharField(label='Comentari', widget=forms.Textarea)

    def clean_comment(self):
        comment = self.cleaned_data.get('comment')
        if len(comment) < 10:
            raise forms.ValidationError("El comentari ha de tenir almenys 10 caràcters.")
        return comment

Conclusió

En aquesta secció, hem après com crear i gestionar formularis en Django. Hem vist com definir formularis, validar les dades i processar-les a les vistes. Els formularis són una part fonamental de qualsevol aplicació web, i Django ens proporciona eines poderoses per treballar amb ells de manera eficient. En el següent tema, explorarem les vistes basades en classes, que ens permetran estructurar millor el nostre codi.

© Copyright 2024. Tots els drets reservats