In deze les leer je hoe je formulieren kunt gebruiken in je Flask webapplicatie. Je zult de basisprincipes van formulierverwerking begrijpen en leren hoe je gebruikersinvoer kunt valideren en presenteren. Dit is cruciaal om je applicatie interactief en gebruiksvriendelijk te maken.
Formulieren zijn de ruggengraat van interactieve webapplicaties. Ze stellen gebruikers in staat om gegevens in te voeren en interactie te hebben met de applicatie. In Flask gebruiken we vaak de extensie Flask-WTF (Werkende Template Forms) om formulieren te creëren, valideren en bewerken. Dit maakt het proces een stuk eenvoudiger en veiliger.
Om Flask-WTF te gebruiken, moet je het eerst installeren:
pip install Flask-WTF
Vervolgens importeer je de benodigde klassen in je Python-code. Hier is een simpel voorbeeld van een formulier met een tekstveld:
from flask import Flask, render_template, request, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'supergeheim'
class NaamFormulier(FlaskForm):
naam = StringField('Naam', validators=[DataRequired()])
submit = SubmitField('Verstuur')
@app.route('/', methods=['GET', 'POST'])
def index():
form = NaamFormulier()
if form.validate_on_submit():
naam = form.naam.data
return render_template('bedankt.html', naam=naam)
return render_template('index.html', form=form)
if __name__ == '__main__':
app.run(debug=True)
In dit voorbeeld:
NaamFormulier
klasse die erft van FlaskForm
.naam
(een tekstveld) en een submit knop submit
.validators=[DataRequired()]
zorgt ervoor dat het veld niet leeg mag zijn./
verwerkt zowel GET als POST requests.form.validate_on_submit()
controleert of het formulier correct is ingevuld.index.html
) gebruik je de formvariabele om de velden weer te geven.In je HTML template (bijvoorbeeld index.html
) gebruik je de formulierobjecten om de velden weer te geven. Hier is een voorbeeld:
<form method="POST">
{{ form.hidden_tag() }}
{{ form.naam.label }} {{ form.naam() }}
{% for error in form.naam.errors %}
<span style="color: red;">{{ error }}</span>
{% endfor %}
{{ form.submit() }}
</form>
{{ form.hidden_tag() }}
is essentieel voor CSRF-bescherming.{{ form.naam.label }}
geeft de label van het veld weer.{{ form.naam() }}
renderd het inputveld.{% for error in form.naam.errors %}
toont eventuele validatie-errors.Flask-WTF maakt validatie eenvoudig. In het bovenstaande voorbeeld gebruiken we DataRequired()
om ervoor te zorgen dat het naamveld niet leeg is. Er zijn veel meer validatoren beschikbaar, zoals Email()
, Length()
etc.
Als er validatiefouten zijn, worden deze opgeslagen in form.naam.errors
. Je kunt deze fouten weergeven in je HTML (zoals in het voorbeeld).
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Welkom terug! In deze uitgebreide les duiken we dieper in de wereld van achtergrondprocessen binnen je Flask webapplicatie. We bouwen voort op de basis van formulieren en gaan nu kijken hoe je taken kunt offloaden naar de achtergrond, zodat je applicatie responsief en efficiënt blijft, zelfs bij intensieve bewerkingen.
Deze kennis is cruciaal voor applicaties op enterprise-niveau, waar performantie en gebruikerservaring van essentieel belang zijn.
In de vorige lessen hebben we geleerd hoe we formulieren kunnen bouwen. Maar wat gebeurt er als de actie die je formulier triggert, veel tijd in beslag neemt? Denk aan het genereren van een rapport, het versturen van een grote hoeveelheid e-mails, of het verwerken van een enorme databestanden. Als je dit direct in je webserver thread doet, zal de gebruiker moeten wachten totdat het proces voltooid is. Dit leidt tot een slechte gebruikerservaring.
De oplossing? Achtergrondprocessen! We gebruiken hiervoor 'task queues' (taakwachtrijen). De basisconcepten zijn:
Hoe werkt het?
Voordelen:
Installeer Celery en een message broker (zoals Redis). Maak een simpele Celery taak die 'Hallo wereld!' print naar de console. Integreer dit met een simpele Flask route die de taak triggert. Gebruik Flask-WTF en laat een formulier de taak triggeren. (Hint: bekijk de Celery documentatie en Flask-Celery integration)
Breid je applicatie uit om een e-mail te versturen in de achtergrond. Gebruik Celery en een e-mail-bibliotheek (zoals Flask-Mail). Laat een formulier de e-mail triggeren. Zorg ervoor dat de gebruiker een bevestiging krijgt dat de e-mail wordt verstuurd. (Hint: Google "Flask Celery send email")
Achtergrondprocessen zijn cruciaal voor enterprise-level webapplicaties. Denk aan:
Zelfs in kleinere applicaties kunnen achtergrondprocessen nuttig zijn, bijvoorbeeld voor het genereren van previews van afbeeldingen, het optimaliseren van websites (bv. het genereren van sitemaps) of het analyseren van logbestanden.
Uitdaging:
Implementeer een progress-bar in je Flask applicatie die de voortgang van een Celery taak weergeeft. Gebruik AJAX of WebSockets om de progress-bar dynamisch bij te werken. (Hint: gebruik de resultaat-back-end van Celery en zoek naar "Flask celery progress bar").
Creëer een Flask-webapp met een formulier dat de naam van een gebruiker vraagt. De gebruiker moet zijn naam invullen en na het submitten van het formulier, wordt de naam weergegeven op een nieuwe pagina. Zorg voor validatie: de naam moet ingevuld worden.
Breid de vorige oefening uit. Voeg een e-mailveld toe aan het formulier en valideer dat de e-mail correct is ingevuld (met behulp van de `Email` validator).
Pas de HTML template aan zodat de formulieren er aantrekkelijker uitzien. Gebruik basis HTML styling (CSS) om de labels, inputvelden en foutmeldingen op te maken.
Denk na over de soorten formulieren die je vaak ziet op websites (registratie, contactformulier, etc.). Welke velden zouden deze formulieren doorgaans bevatten? Welke validaties zijn essentieel?
Ontwerp een simpele website voor een 'fietsenmaker' die een contactformulier bevat. De website moet de klant in staat stellen om een reparatieaanvraag te doen, inclusief velden voor naam, telefoonnummer, e-mailadres en een beschrijving van het probleem.
Voor de volgende les, bereid je voor op het werken met databases in Flask. Bekijk wat ORM's zijn en hoe je je data kunt opslaan en ophalen uit een database. Installeer `Flask-SQLAlchemy` als je dat nog niet hebt gedaan.
We're automatically tracking your progress. Sign up for free to keep your learning paths forever and unlock advanced features like detailed analytics and personalized recommendations.