**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.

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 (bijvoorbeeld http://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=True is 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 nu render_template.
  • return render_template('index.html'): We gebruiken render_template om de index.html pagina weer te geven.

Deep Dive

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

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).

Knowledge Check

Question 1: Wat is het doel van Flask?

Question 2: Welke code wordt gebruikt om een route te definiëren in Flask?

Question 3: Wat doet `render_template()`?

Question 4: Waarom is `debug=True` handig tijdens de ontwikkeling?

Question 5: In welke map moeten HTML templates worden geplaatst in een standaard Flask project?

Practical Application

Stel je voor dat je een simpele webpagina wilt maken voor je lokale voetbalvereniging. Je wilt een pagina maken waarop de laatste uitslagen, de stand van de competitie en een contactformulier staan. Hoe zou je dit aanpakken met de kennis die je nu hebt?

Key Takeaways

Next Steps

Bereid je voor op de volgende les door de basisprincipes van HTML en CSS te herzien. We gaan dieper in op het stylen van webpagina's en het toevoegen van dynamische content aan je Flask applicaties. Probeer te experimenteren met de code en de exercises.

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.

Next Lesson (Day 2)