**Flask & Web Apps Introductie
Welkom bij je eerste stap in de wereld van web ontwikkeling! In deze les leer je de basis van Flask, een populaire Python framework voor web applicaties, en hoe je je eerste eenvoudige webpagina maakt. Je zult begrijpen hoe webapplicaties werken en hoe je een basis structuur in Python kunt bouwen.
Learning Objectives
- Je kunt Flask installeren en een basis Flask applicatie starten.
- Je kunt een route definiëren en een tekst weergeven in de browser.
- Je begrijpt het concept van request en response in web development.
- Je kunt een statische HTML-pagina in je Flask applicatie integreren.
Text-to-Speech
Listen to the lesson content
Lesson Content
Wat is Flask en waarom gebruiken we het?
Flask is een micro-framework voor Python, perfect voor het bouwen van web applicaties. Het is 'micro' omdat het een minimale basis heeft, wat betekent dat je flexibel bent en alleen de componenten toevoegt die je nodig hebt. Flask is populair vanwege zijn eenvoud, flexibiliteit en gebruiksgemak. Het is ideaal voor kleine tot middelgrote projecten, en het kan ook worden uitgebreid voor complexere applicaties.
Denk aan Flask als een 'gereedschapskist' voor web applicaties. Je kiest zelf welke gereedschappen (libraries en packages) je erin stopt om je project te bouwen. Dit in tegenstelling tot 'full-stack' frameworks, die vaak alles aan boord hebben.
Flask Installeren
Voordat we beginnen, moeten we Flask installeren. Open je terminal of command prompt en typ:
pip install flask
Dit installeert Flask en alle benodigde dependencies. pip is de package installer voor Python. Zorg ervoor dat je Python en pip correct geïnstalleerd hebt. Je kunt dit controleren door python --version en pip --version in de terminal te typen.
Als je een virtual environment gebruikt (aanbevolen!), activeer die dan voordat je pip install flask uitvoert.
Je Eerste Flask Applicatie
Laten we nu onze eerste Flask applicatie maken. Maak een nieuw bestand genaamd app.py (of iets dergelijks) en voeg de volgende code toe:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "Hallo, Wereld!"
if __name__ == "__main__":
app.run(debug=True)
Laten we de code uitleggen:
from flask import Flask: Dit importeert de Flask klasse.app = Flask(__name__): Dit maakt een Flask applicatie instantie.__name__verwijst naar de naam van het huidige Python module.@app.route("/"): Dit is een decorator. Het definieert een route ('/') voor je applicatie. De route is de URL die gebruikers in hun browser typen (bijvoorbeeldhttp://127.0.0.1:5000/).def hello_world():: Dit is een functie die wordt uitgevoerd wanneer iemand naar de '/' route gaat.return "Hallo, Wereld!": Deze regel retourneert de tekst die in de browser wordt weergegeven.app.run(debug=True): Dit start de applicatie.debug=Trueis handig tijdens ontwikkeling omdat het automatische herstarten en gedetailleerde foutmeldingen toestaat.
De Applicatie Runnen en Bekijken
Sla app.py op. Open je terminal, navigeer naar de map waar je app.py hebt opgeslagen, en typ:
python app.py
Je zult een bericht zien dat zegt dat de applicatie draait (meestal op http://127.0.0.1:5000/). Open je webbrowser en ga naar dit adres. Gefeliciteerd! Je hebt je eerste Flask web applicatie gemaakt en 'Hallo, Wereld!' wordt weergegeven.
Routes en HTML Weergeven
Laten we nu een route toevoegen die een HTML-pagina weergeeft. Maak een map genaamd templates in dezelfde map als app.py. Maak binnen de templates map een bestand genaamd index.html met de volgende inhoud:
<!DOCTYPE html>
<html>
<head>
<title>Mijn Eerste Webpagina</title>
</head>
<body>
<h1>Welkom!</h1>
<p>Dit is mijn eerste webpagina gebouwd met Flask.</p>
</body>
</html>
Verander vervolgens je app.py als volgt:
from flask import Flask, render_template
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html')
if __name__ == "__main__":
app.run(debug=True)
from flask import Flask, render_template: We importeren nurender_template.return render_template('index.html'): We gebruikenrender_templateom deindex.htmlpagina weer te geven.
Verdiepingssessie
Explore advanced insights, examples, and bonus exercises to deepen understanding.
Uitgebreide Les: Achtergrondprocessen in een Flask Webapp (Voor Beginners)
Welkom terug bij je reis door de wereld van Flask! We hebben de basis gelegd: Flask installeren, simpele routes maken, en HTML weergeven. Nu duiken we dieper in, om te begrijpen hoe we taken op de achtergrond kunnen laten draaien in een enterprise-level webapplicatie. Dit is essentieel voor taken die lang kunnen duren, zoals het verwerken van grote bestanden, het versturen van e-mails, of het communiceren met externe API's. Zonder achtergrondprocessen zou je webapplicatie vastlopen of trager worden.
Deep Dive: Waarom Achtergrondprocessen?
Stel je voor: je webapp moet een rapport genereren, dat gebaseerd is op data van een paar gigabytes. Als je dit direct in de routecode doet, wacht de gebruiker tot het rapport klaar is. Dit is een slechte gebruikerservaring. Achtergrondprocessen, ook wel asynchrone taken genoemd, lossen dit op. Ze laten je app de gebruikers direct een reactie geven (bv. "Rapport wordt gegenereerd, je ontvangt het binnenkort per e-mail"), terwijl het rapport in de achtergrond wordt gemaakt. Zo blijft je webapp responsief.
We gaan gebruik maken van een simpele library: threading. Deze library maakt het mogelijk om meerdere processen tegelijkertijd uit te voeren. Voor grotere enterprise-level applicaties, kun je kijken naar libraries als Celery of RQ. Deze bieden meer geavanceerde mogelijkheden voor taakverdeling en betrouwbaarheid.
Bonus Oefeningen
Oefening 1: Simpel Achtergrondproces.
Pas je bestaande Flask applicatie aan om een simpele functie (bv. het schrijven van een tekst naar een bestand) uit te voeren in een achtergrondproces. Gebruik threading om dit te bereiken. Laat in de webpagina een bericht zien dat het proces is gestart. Voeg daarna een statische pagina toe die je bericht toont.
import threading
from flask import Flask, render_template, request, redirect, url_for
app = Flask(__name__)
def lange_taak():
import time
time.sleep(5) # Simuleer een lange taak
with open("achtergrond_output.txt", "w") as f:
f.write("Taak voltooid in de achtergrond!")
print("Achtergrondtaak voltooid!")
@app.route("/")
def index():
return render_template("index.html") # maak index.html met een startknop
@app.route("/start_taak")
def start_taak():
t = threading.Thread(target=lange_taak)
t.start()
return redirect(url_for('taak_status'))
@app.route("/taak_status")
def taak_status():
# implementeer dit. Laat zien of de taak klaar is, en een link naar de output.
return render_template("status.html") # maak status.html
if __name__ == "__main__":
app.run(debug=True)
Oefening 2: Parameteroverdracht.
Breid Oefening 1 uit. Laat de gebruiker via een formulier een parameter (bv. een naam) invoeren, die meegegeven wordt aan de achtergrondtaak. Zorg ervoor dat de taak de naam gebruikt bij het schrijven naar het bestand.
Hint: Gebruik request.form om de parameter uit het formulier te halen.
Real-World Connecties
Achtergrondprocessen zijn cruciaal voor veel webapplicaties:
- E-mail versturen: Verzend e-mails na registratie, wachtwoordherstel of notificaties zonder de gebruiker te laten wachten. Denk aan je ervaring met LinkedIn of je bank-app.
- Bestandsverwerking: Converteer video's, comprimeer afbeeldingen, of verwerk grote CSV-bestanden.
- API-integratie: Roep externe API's aan die langer duren om te reageren, zoals het genereren van kaarten, of data-analyse tools.
- Periodieke taken: Voer taken uit op gezette tijden, zoals het updaten van de database of het genereren van rapporten.
Stel je voor, je bouwt een webshop. De orderbevestigingen, tracking-nummers, voorraad updates, etc. moeten allemaal op de achtergrond plaatsvinden.
Challenge Yourself
Probeer een progress bar te implementeren in je webpagina. Laat de progress bar de voortgang van het achtergrondproces weergeven. Dit vereist het gebruik van JavaScript (bv. met behulp van AJAX) om de status van het proces op te vragen.
Verder Leren
- Celery: Een geavanceerd taakwachtrij framework voor Python. Geschikt voor enterprise-level applicaties. (Celery Documentation)
- RQ (Redis Queue): Een eenvoudigere taakwachtrij, vaak gebruikt als alternatief voor Celery.
- Asynchrone Programming in Python (asyncio): Een andere manier om concurrency te bereiken in Python, die vaak wordt gebruikt met libraries als FastAPI.
Duik dieper in de wereld van asynchronous programming en taakwachtrijen! Dit is een essentiële skill voor moderne web development.
Interactive Exercises
Enhanced Exercise Content
Route naar een andere pagina
Voeg een nieuwe route toe aan je Flask applicatie (bijvoorbeeld `/about`) en laat deze route een andere HTML-pagina (bijvoorbeeld `about.html`) weergeven. Zorg ervoor dat de `about.html` pagina in de `templates` map staat en andere content bevat dan `index.html`.
Debugging oefening
Verander de code in `app.py` om een fout te veroorzaken (bijvoorbeeld een typefout in de code of een ontbrekende import). Bekijk de foutmelding in de browser en probeer de fout te begrijpen en te corrigeren. Debugging is een essentieel onderdeel van programmeren!
Aanpassing aan html-pagina
Voeg een CSS stijl toe aan je index.html pagina (bijvoorbeeld een achtergrondkleur, font-style, etc.) en speel met verschillende HTML elementen (headings, paragraphen, lijsten).
Practical Application
🏢 Industry Applications
E-commerce
Use Case: Asynchrone product catalog updates and inventory management in a large online shop.
Example: A webshop receives a new batch of products. A background process updates the database, generates product images, sends notifications to users, and adjusts inventory levels, without blocking the user interface during browsing and purchasing.
Impact: Improved user experience, reduced downtime, and more efficient inventory control, which lead to higher sales and better customer satisfaction.
Healthcare
Use Case: Automated processing of patient data and report generation in a medical practice.
Example: A doctor enters patient information. A background process automatically processes the data, calculates risk scores, generates medical reports, and sends notifications to relevant personnel (e.g., specialists), without slowing down the doctor's interaction with the patient's record.
Impact: Faster and more reliable information processing, reduced errors, and improved efficiency for medical professionals, leading to better patient care and more efficient operations.
Financial Services
Use Case: Real-time fraud detection and transaction monitoring in a banking application.
Example: When a customer initiates a transaction, a background process checks for suspicious activity (e.g., unusual transaction amounts or locations), flags potentially fraudulent transactions, and triggers alerts to security personnel, without interrupting the customer's transaction flow.
Impact: Improved security, reduced financial losses due to fraud, and maintained customer trust, all of which contribute to the financial institution's profitability and reputation.
Manufacturing
Use Case: Automated data collection and analysis from production equipment in a factory.
Example: Sensors on a production line generate data about machine performance. A background process collects this data, performs real-time analysis (e.g., identifying bottlenecks), and generates reports for engineers, without slowing down the production line.
Impact: Improved production efficiency, reduced downtime, and optimized resource allocation, resulting in lower costs and increased output for the manufacturing company.
Media & Entertainment
Use Case: Automated video transcoding and content delivery.
Example: A user uploads a video to a streaming platform. A background process transcodes the video into multiple formats and resolutions, generates thumbnails, and distributes the video across a content delivery network (CDN), enabling users to watch the video quickly and smoothly, irrespective of their device or location.
Impact: Improved user experience, faster content delivery, and efficient resource allocation, increasing audience reach and engagement for the streaming service.
💡 Project Ideas
Simple Uitslagen Tracker
BEGINNERCreate a Flask web application that scrapes voetbaluitslagen from a website and displays them. The scraping process should run in the background, updating the website periodically without user interaction.
Time: 3-5 hours
Email Subscriber Portal
INTERMEDIATEBuild a webapp where users can subscribe to an email newsletter. Use a background process to send emails to subscribers, handling a queue and avoiding blocking the main request.
Time: 5-8 hours
Automated Image Processing Service
INTERMEDIATECreate a service where users can upload images, which are then processed in the background (e.g., resized, watermarked, converted to other formats). The user should see a progress indicator.
Time: 8-12 hours
Real-time Chat Application
ADVANCEDDevelop a simple chat application where messages are delivered in real-time using WebSockets. Background tasks can be used to handle asynchronous tasks like user presence status updates.
Time: 12-16 hours
Key Takeaways
🎯 Core Concepts
Achtergrondprocessen (Background Processes)
Het uitvoeren van lange of resource-intensieve taken buiten de reguliere web request-response cyclus. Dit voorkomt blocking van de webserver en verbetert de user experience door de website responsief te houden.
Why it matters: Kritiek voor enterprise web applicaties die vaak taken als dataverwerking, rapportgeneratie of complexe berekeningen vereisen. Zonder dit kan je webapplicatie onbruikbaar worden.
Taakwachtrijen (Task Queues)
Een systeem voor het beheren en distribueren van achtergrondtaken. Taken worden in een wachtrij geplaatst en door workers (afzonderlijke processen of threads) opgepakt en verwerkt.
Why it matters: Biedt betrouwbaarheid, schaalbaarheid en robuustheid voor achtergrondtaken. Zorgt ervoor dat taken niet verloren gaan en efficiënt worden verdeeld over beschikbare resources.
Celery als Taakwachtrij Framework
Celery is een populair Python-framework voor het implementeren van taakwachtrijen. Het ondersteunt verschillende message brokers (bijv. RabbitMQ, Redis) en biedt flexibiliteit en kracht.
Why it matters: Celery vereenvoudigt het bouwen en beheren van achtergrond taken. Het biedt out-of-the-box functionaliteit voor monitoring, scheduling en resultaatopslag.
💡 Practical Insights
Implementeer Celery voor asynchrone taken.
Application: Installeer Celery en een message broker (bijv. Redis). Definieer Celery taken (functies) en roep ze asynchroon aan vanuit je Flask-routes. Monitor de taak status.
Avoid: Niet vergeten de message broker te starten. Vergeten error handling toe te voegen voor taken. Geen resultaten ophalen en monitoren. Onjuiste configuratie van Celery's broker.
Gebruik een procesmanager (bijv. Supervisor) voor workers.
Application: Configureer Supervisor om Celery workers te draaien en te monitoren. Dit zorgt voor automatische herstart bij crashes en beheert de workers processen.
Avoid: Verkeerde configuratie van Supervisor. Workers die conflicteren met de webserver processen. Geen logging van worker errors.
Volgende Stappen
⚡ Immediate Actions
Bekijk een basis Flask tutorial, gericht op het begrijpen van routes, views en rendering van HTML pagina's.
Versterkt de basiskennis van Flask en bereidt voor op de volgende les over templates.
Time: 1-2 uur
Installeer Flask en een code editor (bijv. VS Code). Maak een eenvoudig 'Hello, World!' Flask webapp.
Zorgt ervoor dat de ontwikkelomgeving correct is opgezet en dat je de basisbewerkingen begrijpt.
Time: 30-60 minuten
🎯 Preparation for Next Topic
**HTML, CSS & Flask Templates
Bekijk tutorials over HTML, CSS en Flask templates (bijv. Jinja2).
Check: Zorg ervoor dat je de basis van HTML-tags en CSS-styling begrijpt. Controleer of je begrijpt hoe een Flask webapp HTML kan renderen.
**Flask Forms en Gebruikersinvoer
Lees documentatie over Flask-WTF of een ander formulier handling library.
Check: Verzeker jezelf ervan dat je basiskennis hebt over HTML forms en HTTP methoden (GET en POST).
**Basis Kennis van Background Processen
Lees artikelen of tutorials over de basisprincipes van background processen, threads, en multiprocessing.
Check: Basis kennis van Python threading is wenselijk, maar geen vereiste.
Your Progress is Being Saved!
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.
Extended Learning Content
Extended Resources
Flask Documentatie: Achtergrondprocessen
documentation
Officiële documentatie van Flask over het gebruik van achtergrondprocessen, met focus op threading en multiprocessing.
Python Multiprocessing: Een Complete Gids
tutorial
Een uitgebreide gids over het gebruik van het 'multiprocessing'-module van Python, inclusief voorbeelden en best practices. Dit helpt om achtergrondtaken te begrijpen.
Python Tutor
tool
Visualiseert de uitvoering van Python-code, inclusief multithreading en multiprocessing, wat helpt bij het begrijpen van achtergrondprocessen.
Stack Overflow
community
Vraag en antwoord platform voor programmeurs. Gebruik de tag 'flask' en 'achtergrondprocessen' of 'multithreading'.
Reddit - r/flask
community
Een sub-reddit gewijd aan Flask-ontwikkeling. Deel je vragen en discussieer met andere Flask-gebruikers.
Een e-mail verstuurder in achtergrondproces
project
Maak een Flask-applicatie die e-mails in de achtergrond verstuurt met behulp van threading of multiprocessing, of Celery.
Een taak scheduler met Celery
project
Implementeer Celery in een Flask-app om taken op de achtergrond te plannen en uit te voeren. Denk aan periodieke taken.