Het formulierensysteem van Django is een hulpmiddel voor het veilig ontvangen en valideren van gegevens. In dit artikel bekijken we wat Django Forms zijn, waarom ze nodig zijn, en hoe je ze basisgebruik kunt toepassen, allemaal op een manier die beginners goed begrijpen.

Django Forms conceptdiagram dat de stroom van gebruikersinvoer naar validatie, verwerking en opslag toont

Definitie van Django Forms

Django Forms zijn hulpmiddelen die gegevens van gebruikers ontvangen, verwerken en valideren. Hierdoor kunnen we onjuiste invoer van gebruikers en beveiligingsproblemen voorkomen.

Functionaliteiten van Django Forms

  • HTML-formulieren genereren: Formulieren worden dynamisch op de server gecreëerd.
  • Validatie: De indeling van de ingevoerde gegevens wordt automatisch gevalideerd.
  • Gegevensverwerking: Ingevoerde gegevens worden omgezet in Python-objecten.

Waarom zijn formulieren nodig?

1. Beperkingen van HTML-formulieren

HTML-formulieren kunnen de invoergegevens van gebruikers niet zelfstandig verwerken. De server moet de gegevens handmatig verwerken en valideren, wat omslachtig is en de kans op beveiligingslekken vergroot.

2. Voordelen van Django Forms

  • Automatische validatie: Verplichte invoer, indelingscontrole (bijvoorbeeld e-mailindeling) worden automatisch afgehandeld.
  • Verhoogde beveiliging: CSRF-bescherming wordt standaard aangeboden.
  • Verhoogde productiviteit: Complexe formulierlogica kan eenvoudig worden geïmplementeerd.

Hoofdelementen van Django Forms

1. forms.Form

forms.Form biedt een formulierklasse in Django die gegevens onafhankelijk valideert en verwerkt.

Voorbeeld: eenvoudig formulier
from django import forms

class SimpleForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
  • name: Een tekenreeksveld met een maximale lengte van 100.
  • email: Een veld dat de e-mailindeling valideert.

2. forms.ModelForm

forms.ModelForm is een formulier dat is gekoppeld aan een Django-model en vereenvoudigt de interactie met de database. Hierdoor kunnen modelinstanties automatisch worden aangemaakt of bijgewerkt.

Voorbeeld: modelgebaseerd formulier
from django import forms
from .models import Post

class PostForm(forms.ModelForm):
    class Meta:
        model = Post
        fields = ['title', 'content']
  • model: Het Django-model waarmee verbinding wordt gemaakt.
  • fields: De velden die van het model in het formulier moeten worden opgenomen.

3. Velden en widgets

  • Veld: Een klasse voor het valideren en opslaan van invoergegevens.
  • Widget: Wordt gebruikt voor het renderen van HTML-formulierelementen.
Belangrijke velden en widgets
Veld Omschrijving Standaard widget
CharField Tekstveld voor invoer TextInput
EmailField Invoerveld voor e-mailindeling EmailInput
IntegerField Invoerveld voor gehele getallen NumberInput
ChoiceField Selectie-invoerveld Select

Voorbeeld van het maken van een basisformulier

Definitie van het formulier

from django import forms

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

Formulierverwerking in de view

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():
            # Verwerkingslogica (bijv. e-mail verzenden)
            name = form.cleaned_data['name']
            email = form.cleaned_data['email']
            message = form.cleaned_data['message']
            print(f"Naam: {name}, E-mail: {email}, Bericht: {message}")
    else:
        form = ContactForm()
    return render(request, 'contact.html', {'form': form})

Rendering van het formulier in de sjabloon

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Verzenden</button>
</form>
  • {{ form.as_p }}: Render het formulier weer in <p>-tags.

Samenvatting van de gebruikersinvoerverwerkingsstroom

  1. Formulier renderen: Het formulierobject dat in de view is aangemaakt, wordt doorgegeven aan de sjabloon.
  2. Invoer van de gebruiker indienen: Gegevens worden via een POST-verzoek via een HTML-formulier verzonden.
  3. Validatie: De view roept form.is_valid() aan om de gegevens te valideren.
  4. Gegevensverwerking: Het formulier retourneert automatisch gevalideerde gegevens in cleaned_data met behulp van de ingebouwde clean()-methode.
  5. Extra validatie indien nodig: Je kunt specifieke velden verder valideren door een clean_()-methode te schrijven.
  6. Gegevens opslaan: De gegevens worden opgeslagen door form.save() aan te roepen (in het geval van ModelForm).

Afsluiting van Deel 1

Django Forms zijn essentiële hulpmiddelen voor het veilig ontvangen en verwerken van gegevens. In dit artikel hebben we de basisprincipes en het gebruik behandeld. In het volgende deel zullen we forms.Form en forms.ModelForm vergelijken en ons verdiepen in praktische toepassingen.