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
-
Crear un Formulari de Registre d'Usuari:
- Crea un formulari amb els camps
username
,password
iemail
. - Afegeix validació personalitzada per assegurar-te que el
username
no contingui caràcters especials.
- Crea un formulari amb els camps
-
Formulari de Comentaris:
- Crea un formulari amb els camps
name
,email
icomment
. - Afegeix validació per assegurar-te que el
comment
tingui almenys 10 caràcters.
- Crea un formulari amb els camps
Solucions
- 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
- 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.
Curs de Desenvolupament Web amb Django
Mòdul 1: Introducció a Django
- Què és Django?
- Configuració de l'Entorn de Desenvolupament
- Creació del teu Primer Projecte Django
- Comprensió de l'Estructura del Projecte Django
Mòdul 2: Conceptes Bàsics de Django
- Aplicacions Django i Estructura del Projecte
- Enrutament d'URL i Vistes
- Plantilles i Fitxers Estàtics
- Models i Bases de Dades
- Interfície d'Administració de Django
Mòdul 3: Django Intermedi
Mòdul 4: Django Avançat
- Consultes Avançades amb Django ORM
- Models d'Usuari Personalitzats
- Senyalitzacions de Django
- Proves en Django
- Optimització del Rendiment