Python

ChatGPT

Gebruik ChatGPT, maar gebruik het goed!

In deze module moeten jullie ChatGPT gebruiken. Maar voordat we dat gaan doen, eerst even een soort van regel:

Deze regel luidt:

Gebruik alle bronnen die je kan vinden om zo snel als je kunt iets te ontwikkelen, maar zorg er altijd voor dat je elke regel code begrijpt.

En waarom is dat?

Veel bedrijven zijn super afhankelijk van hun software. Zo is er een bedrijf 'Knight Capital' waar het volgende mee is gebeurd.

Tijdens de fatale handelsdag in 2012 werd een nieuwe handelssoftware geïmplementeerd bij Knight Capital, maar er werd een bug geïntroduceerd in het algoritme van de software. Hierdoor begon de software onjuiste orders te plaatsen op verschillende aandelenmarkten.

De ongecontroleerde en foutieve orderstroom zorgde ervoor dat Knight Capital enorme hoeveelheden aandelen kocht of verkocht tegen verkeerde prijzen. Dit resulteerde in een verlies van ongeveer $440 miljoen binnen enkele minuten.

Het bedrijf ging failliet.

Dit incident heeft de financiële sector veranderd. Er kwam meer regelgeving, en alle software werd nog beter getest. Als programmeur in de financiële sector kam een nieuwe regel:

"Als de software werkt, maar je begrijpt niet precies wat en hoe het werkt dan mag het niet in productie."

Als je dus stukken software kopieert van het internet of van ChatGPT en je weet niet precies hoe het werkt dan plak je al die stukjes code aan elkaar waarvan telkens mogelijk kleine onbedoelde foutjes code zitten. Als die onbedoelde kleine stukjes software zullen vroeg of laat tot een storing leiden. Het hangt natuurlijk af van in welke sector je werkt, hoe erg dan de gevolgen van een storing zijn.

Dus gebruik zoveel ChatGPT als je wil, maar zie je een commando dat je niet begrijpt, laat het je dan uitleggen. Begrijp je het dan nog niet, gebruik het dan niet, zoek een andere oplossing!

Vanaf nu zul je ook meer worden beoordeeld op het kunnen uitleggen hoe code werkt.

Voordelen van het snappen van hoe code werkt:

image-1688543576041.png

Dus gebruik alle hulpmidellen die je ter beschikking staan, maar zorg dat je kan uitleggen wat je hebt gemaakt.

Python

In deze module(s) gaan we Python leren. Niet alles wordt meer stap-voor-stap uitgelegd. Vraag ChatGPT om uitleg. Vraag bijvoorbeeld aan chatGPT hoe je een if-then-else maakt.

Als je bijvoorbeeld aan ChatGPT de volgende vraag stelt:

Hoe maak je in Python een if-the-else?

Dan krijg je een uitleg en een voorbeeld. Mocht je dat niet krijgen dan kun je ook om een voorbeeld vragen!

Opdracht

Maak een txt bestand en leg daarin in eigen woorden uit wat het vercshil is van een if-then-else in PHP en in Python.

Noem minimaal twee veschillen.



Wat is Python?

Wat Python?

Guido van Rossum is een Nederlandse computerprogrammeur die bekend staat als de maker van de programmeertaal Python.

image-1688543664694.png

Python heeft dus Nederlandse roots.

Maar wat heeft Python zo bekendgemaakt?

Populariteit

Python is momenteel (2023) erg populair en staat volgens de TIOBE index op nummer 1.

image-1687453085534.png
(Stackoverflow "Most Popular Technology" 2023)

Volgens gebruikers van Stack Overflow was Python de op twee na populairste technology (na JavaScript en HTML).

Let op: dit is wat andes als meest gebruikte technology, daarbij komt PHP vaak op nummer één uit.

Python wordt ook veel gebruikt in het onderwijs (HBO en Universiteit).

Voordelen Python

Waarom zou je Python in plaats van PHP gebruiken?

Installatie Python

Om Python op een Windows-machine te installeren, kun je de volgende stappen volgen:

  1. Ga naar de officiële Python-website op https://www.python.org/downloads/.

  2. Klik op de knop "Downloaden" onder de meest recente versie van Python (bijvoorbeeld Python 3.9.6).

  3. Scroll naar beneden op de downloadpagina en selecteer de juiste installatieprogramma voor je Windows-besturingssysteem. Kies tussen de 32-bits (x86) of 64-bits (x86-64) versie, afhankelijk van je systeemconfiguratie.

  4. Nadat het installatieprogramma is gedownload, dubbelklik je erop om het uit te voeren.

  5. In het installatieprogramma wordt een dialoogvenster geopend. Zorg ervoor dat je het selectievakje "Add Python to PATH" aanvinkt en klik op "Install Now" om de standaardinstallatie te starten.

  6. De installatie begint en Python wordt op je systeem geïnstalleerd. Het kan enige tijd duren. Zorg ervoor dat je de optie "Disable path length limit" selecteert als deze wordt weergegeven.

  7. Na de installatie wordt er een dialoogvenster geopend met de titel "Setup was successful". Vink het selectievakje "Disable path length limit" aan als deze optie beschikbaar is en klik op "Close" om de installatie te voltooien.

  8. Om te controleren of Python correct is geïnstalleerd, open je CMD (Win + R, typ "cmd" en druk op Enter) en typ je "python --version" gevolgd door Enter. Je zou de geïnstalleerde versie van Python moeten zien.

Gefeliciteerd! Je hebt Python succesvol geïnstalleerd op je Windows-machine. Nu kun je Python gebruiken om scripts uit te voeren, applicaties te ontwikkelen en meer.

Inspringen

Allereerst....superbelangrijk, in Python is het inspringen belangrijk. Doe je dit niet op de juiste manier, dan werkt je code niet!

import random

def raad_het_getal():
    willekeurig_getal = random.randint(1, 100)
    aantal_pogingen = 0

    while True:
        gok = int(input("Raad het getal tussen 1 en 100: "))

        if gok == willekeurig_getal:
            print(f"Gefeliciteerd! Je hebt het juiste getal geraden in {aantal_pogingen} poging(en).")
            break
        elif gok < willekeurig_getal:
            print("Te laag! Probeer het opnieuw.")
        else:
            print("Te hoog! Probeer het opnieuw.")

raad_het_getal()

Maak een bestand aan (in VCS of andere editor) en zet het bovenstaande Python programmaatje er in. Voer het programma uit en bestudeer hoe het werkt.

Je ziet na elke : begint er een programma-blok. Op regel 3 begin je met het maken van een functie. Je springt dan in en alles wat op dit niveau is ingesprongen (of verder) hoort bij de functie. Regel 19 is dus de eerste regel die niet meer bij de functie hoort.

Regel 11 en 12 hoort bij de if, 14 bij de elif en 16 bij de else.

Probeer het spel uit.

Er is een klein foutje gemaakt; als je het spel hebt gespeeld dan wordt er gezegd dat je het getal hebt geraden in 0 pogingen.


Opdracht 1

Pas de code aan zodat als je het getal hebt geraden het aantal pogingen wordt afgedrukt. Dus je drukt bijvoorbeeld af:

"Goed zo je hebt het getal binnen 6 beurten geraden."

Tip: om sneller te kunnen testen kun je het spel ook even veranderen in 'Raad een getal tussen 1 en 10'. Let wel; op dat je de juiste versie van het spel inlevert en dat is de versie waarbij je een getal van 1..100 moet raden.

Inleveren

Aangepaste python code

(nakijken: import random 100 aantal_pogingen while aantal_pogingen aantal pogingen raad)


Opdracht 2

Pas de code aan zodat je na 10 beurten het spel stopt en de gebruiker verteld dat hij het maximale aantal beurten van 10 heeft gehaald. Laat de gebruiker weten wat het getal was en dat hij heeft verloren.

Eis: verander de hiervoor de oneindige loop while true:

Inleveren

Aangepaste python code

(nakijken: import random 100 aantal_pogingen while aantal_pogingen aantal_pogingen  aantal pogingen raad)


Opdacht 3

In Python wordt vaak een API gebruikt. API's geven vaak JSON-output, bijvoorbeeld:

{
  "personen": [
    {
      "naam": "Alice",
      "leeftijd": 25,
      "stad": "Amsterdam"
    },
    {
      "naam": "Bob",
      "leeftijd": 32,
      "stad": "Rotterdam"
    },
    {
      "naam": "Charlie",
      "leeftijd": 42,
      "stad": "Utrecht"
    }
  ]
}

Maak dit JSON bestand aan en noem het "data.json". Dus maak een nieuw bestand en zet de bovenstaande gegevens in dit nieuwe bestand.

Maak het volgende Python script in dezelfde directory/folder aan.

import json

# JSON-bestand lezen
with open("data.json") as json_bestand:
    data = json.load(json_bestand)

# Gegevens verwerken
personen = data["personen"]
for persoon in personen:
    naam = persoon["naam"]
    leeftijd = persoon["leeftijd"]
    stad = persoon["stad"]
    print(f"Naam: {naam}, Leeftijd: {leeftijd}, Stad: {stad}")

Controleer of je code werkt.

Zoek op wat het commando import JSON doet.

Opdracht regel 10, 11 en 12 zou je weg kunnen laten, maar dan moet je wel regel 13 aanpassen.

Pas regel 13 aan zodat de code werkt zonder regel 10, 11 en 12.

Inleveren

Aangepaste python code

(import json personen for !["personen] !['leeftijd] !["stad"] naam leeftijd stad)


Opdracht 5

Pas daarna de JSON aan zodat iedereen een telefoonnummer krijgt en pas de code aan zodat het telefoonnummer wordt afgedrukt. Het telefoonnummer wordt als laatste afgedrukt (dus na de stad).

(import json personen for naam leeftijd stad telefoonnummer)

Inleveren

Aangepaste python code

--


Opdrachten

We springen meteen in het diepe. Jullie hebben nu al veel programmeerervaring (en ervaring met Google en ChatGPT) dus hier gaan we.

Let erop dat ervoor zorgt dat je alles goed begrijpt, begrijp je het niet vraag het dan aan ChatGPT.

Vraag bijvoorbeeld aan ChatGPT "Hoe moet ik inspringen in Python?", of "Kun je een voorbeeld geven van inspringen in Python?"

Inspringen

Allereerst....superbelangrijk, in Python is het inspringen belangrijk. Doe je dit niet op de juiste manier, dan werkt je code niet!

import random

def raad_het_getal():
    willekeurig_getal = random.randint(1, 100)
    aantal_pogingen = 0

    while True:
        gok = int(input("Raad het getal tussen 1 en 100: "))

        if gok == willekeurig_getal:
            print(f"Gefeliciteerd! Je hebt het juiste getal geraden in {aantal_pogingen} poging(en).")
            break
        elif gok < willekeurig_getal:
            print("Te laag! Probeer het opnieuw.")
        else:
            print("Te hoog! Probeer het opnieuw.")

raad_het_getal()

Maak een bestand aan (in VCS of andere editor) en zet het bovenstaande Python programmaatje er in. Voer het programma uit en bestudeer hoe het werkt.

Je ziet na elke : begint er een programma-blok. Op regel 3 begin je met het maken van een functie. Je springt dan in en alles wat op dit niveau is ingesprongen (of verder) hoort bij de functie. Regel 19 is dus de eerste regel die niet meer bij de functie hoort.

Regel 12 en 13 hoort bij de if, 15 bij de else if en 17 bij de else.

Probeer het spel uit.

Er is een klein foutje gemaakt; als je het spel hebt gespeeld dan wordt er gezegd dat je het getal hebt geraden in 0 pogingen.


Opdracht 1

Pas de code (raad een getal) aan zodat als je het getal hebt geraden het aantal pogingen juist wordt afgedrukt.

Tip: om sneller te kunnen testen kun je het spel ook even veranderen in 'Raad een getal tussen 0 en 10'.

Je kunt ChatGPT gebruiken, maar laat het niet al je code genereren, maar vraag kleine stukjes zodat je begrijpt wat er gebeurt.

Inleveren

Aangepaste python code

(nakijken: import random aantal_pogingen while aantal_pogingen aantal pogingen raad)


Opdracht 2

Pas de code aan zodat je na 10 beurten het spel stopt en de gebruiker verteld dat hij het maximale aantal beurten van 10 heeft gehaald. Laat de gebruiker weten wat het getal was en dat hij heeft verloren.

Eis: verander de hiervoor de oneindige loop while true:

Inleveren

Aangepaste python code

(nakijken: import random aantal_pogingen while aantal_pogingen aantal_pogingen  aantal pogingen raad)


Opdacht 3

In Python wordt vaak een API gebruikt. API's geven vaak JSON output, bijvoorbeeld:

{
  "personen": [
    {
      "naam": "Alice",
      "leeftijd": 25,
      "stad": "Amsterdam"
    },
    {
      "naam": "Bob",
      "leeftijd": 32,
      "stad": "Rotterdam"
    },
    {
      "naam": "Charlie",
      "leeftijd": 42,
      "stad": "Utrecht"
    }
  ]
}

Maak dit JSON bestand aan.

En maak het volgende Python script.

import json

# JSON-bestand lezen
with open("data.json") as json_bestand:
    data = json.load(json_bestand)

# Gegevens verwerken
personen = data["personen"]
for persoon in personen:
    naam = persoon["naam"]
    leeftijd = persoon["leeftijd"]
    stad = persoon["stad"]
    print(f"Naam: {naam}, Leeftijd: {leeftijd}, Stad: {stad}")

Controleer of je code werkt.

Zoek op wat het commando import JSON doet.

Opdracht regel 10, 11 en 12 zou je weg kunnen laten, maar dan moet je wel regel 13 aanpassen.

Pas regel 13 aan zodat de code werkt zonder regel 10, 11 en 12.

Inleveren

Aangepaste python code

import json personen for !["personen] !['leeftijd] !["stad"] naam leeftijd stad


Opdracht 4

Pas daarna de JSON aan zodat iedereen een telefoonnummer krijgt en pas de code aan zodat het telefoonnummer wordt afgedrukt. Het telefoonnummer wordt als laatste afgedrukt (dus na de stad).

(import json personen for naam leeftijd stad telefoonnummer)

Inleveren

Aangepaste python code

--


API en JSON

Wat is een API?

Een API (Application Programming Interface) is een toegangspoort vanuit een website om informatie op te vragen.

Het is eigenlijk een soort database (zoals onze SQL-database) maar dan op een andere server. Je kunt als gebruiker die informatie opvragen, maar de informatie die op een website staat si door een programma lastig te verwerken. Daarom is er een soort standaard formaat om gegevens te delen en dat formaat heet JSON. De meeste API's gebruiken dan ook JSON als een formaat om gegevens van de ene site naar de andere te sturen.

Zo maakt de Canvas Monitor gebruik van de Canvas API en kan het daarmee gegevens ophalen uit Canvas over jouw voortgang. De reden dat de Canvas Monitor niet altijd up-to-date is, is omdat er een apart (Python) programma is dat om bepaalde tijden via de API vraagt of er updates zijn.

Via een API kan je meestal gegevens opvragen, maar ook veranderen. Voorlopig gaan wij kijken naar het lezen van gegevens via een API. Er zijn verschillende soorten API's.

Wil je nog wat meer voorbeeld van API;s dan wordt er in dit korte YouTube filmpje nog een keer uitgelegd wat een API is.

https://www.youtube.com/watch?v=AwXoCmz4yMg&pp=ygUKd2F0IGlzIEFQSQ%3D%3D

Een API gebruiken in Python

Ga naar:

https://www.wijs.ovh/c-api/

dit is een API interface waarbij je alle gegevens van alle landen van de wereld kan opvragen.

Check de JSON die de API geeft.

We gaan met een Python programma een lijstje maken van alle landen en hun hoofdsteden.

Omdat te doen hebben we een Python Library nodig. Deze zorgt ervoor dat je een webpagina kan opvragen. Deze library heet requests en met dit commando importeren we de library (die is vergelijkbaar met require in PHP).

Na de import lezen we de informatie uit de API op.

import requests

response = requests.get(f"https://www.wijs.ovh/c-api/")
if response.status_code == 200:
  countries_data = response.json()
else:
  print("No Luck, I cannot get data from the API")
  
# print( countries_data[0]['name']['common'], countries_data[0]['capital'][0], countries_data[0]['car']['side'] )
# print( countries_data[113]['name']['common'], countries_data[113]['capital'][0], countries_data[113]['car']['side'] )

Try it out!

Deze code leest voert een API-call uit en krijgt JSON terug waarin informatie over alle landen van de wereld staat.

Je kunt in je browser de JSO oproepen door de URL te gebruiken die in de code staat.

Die JSON is een heleboel data en hoe weten we nu wat en hoe we daar gegevens uit kunnen halen?

JSON ontcijferen

Je hebt hiervoor een hulpmiddel nodig. Er zijn er meerdere, maar ik raad https://jsonhero.io/ aan.

image-1688577364708.png

Als je het JSON-bestand inleest (dat kan door de URL in de tool mee te geven dan zie je een interface zo als in het plaatje.

In de eerste kolom staat 0,1,2,3,4, ..... dat zijn de record. In dit geval staat alle informatie over één land in een zo'n record.

Stel ons JSON bestand staat in de variabele countries_data, dan kunnen we het derde (of eigenlijk vierde want we beginnen weer met 0 te tellen) land selecteren met:

countries_data[3]

Nu hebben we alle data van het derde land In de volgende kolom staan alle items die in een land staan. Als eerste zien we name, we kiezen nu de name door:

countries_data[3][name]

In de derde kolom staan nu weer drie items, common, official, en nativeName. Als we de common naam willen, dan akn dat door:

countries_data[3][name][common]

In de code staan op de laatste twee regels een paar voorbeelden. Loop deze na en controleer of deze werken.

Zie je wat countries_data[0]['car']['side'] dit afdrukt? Probeer het uit!

Stel we willen alle namen van alle landen afdrukken. Dat kan met:

print(countries_data[0][name][common])
print(countries_data[1][name][common])
print(countries_data[2][name][common])
....
....

Niet handig dus we gebruiken een loop in Python. Net als we in PHP foreach zouden gebruiken, doen we dit in Python op de volgende manier:

for item in countries_data
  print(print(item[name][comon]))

De variabele item wordt in de loop telkens countries_data[0], countries_data[1], countries_data[2], countries_data[3], etc. etc.

Opdracht

Maak een txt bestand en beantwoord de volgende vraag:

  1. Als je de hoofdstad afdrukt van een land dan gebruik je countries_data[0]['capital'][0] Waarom staat die [0] erachter en waarom denk je dat dat nodig is?

Opdracht

Druk alle namen van alle landen af met daarachter de munteenheid (currency).

Gebruik niet de afkorting maar de volledige naam, zoals:

Inleveren

  1. Python code (py bestand) en;
  2. een schermafdruk van de CMD waarin je de code hebt gedraaid.




Idee voor later......

import requests
import random

def get_random_countries(num_countries):
    response = requests.get(f"https://restcountries.com/v3.1/all")
    if response.status_code == 200:
        countries_data = response.json()
        random_countries = random.sample(countries_data, num_countries)
        return random_countries
    else:
        return None

def play_game():
    random_countries = get_random_countries(10)
    if random_countries is None:
        print("Failed to retrieve country data. Please try again later.")
        return
    
    total_points = 0
    
    for country in random_countries:
        name = country['name']['common']
        population = country['population']
        
        print(f"Guess the population of {name}: ")
        guess = input()
        
        try:
            guess = int(guess)
            difference = abs(guess - population)
            points = max(0, 100 - difference // 1000000)  # Calculate points based on difference
            
            print(f"The population of {name} is {population}")
            print(f"You guessed {guess}. You scored {points} points.\n")
            
            total_points += points
        except ValueError:
            print("Invalid input. Skipping the country.")
    
    print(f"Game over! Your total score is {total_points}.")

play_game()

Strings

Strings zijn best een beetje bijzonder in Python.

 

JSON hoogste leeftijd

Maak de volgende code af.

In het programma wordt een JSON-structuur gegeven waarin persoonsnamen staan met hun leeftijd.

Maak de code af zodat de maximale leeftijd wordt gevonden.

import json

# JSON data
json_data = """
{
    "mensen": [
        {"naam": "Johan Vermeulen", "leeftijd": 23},
        {"naam": "Ahmed Al-Hassan", "leeftijd": 26},
        {"naam": "María Rodríguez", "leeftijd": 30},
        {"naam": "Emma de Vries", "leeftijd": 28},
        {"naam": "Mohammed Abdulrahman", "leeftijd": 35}
    ]
}
"""

def vind_max_leeftijd(json_data):
    # Zet de JSON data om naar een Python object
    data = json.loads(json_data)

    # Initieer de maximale leeftijd variabele
    max_leeftijd = 0

    # TODO: Schrijf hier de code die door de data loopt, 
    #       de leeftijden vergelijkt en de maximale leeftijd vindt

    return max_leeftijd

# Test de functie
print(vind_max_leeftijd(json_data))  # Dit zou 35 moeten printen

Inleveren

Gebruik de code van hierboven en vul de code aan (bij # TODO) zodat de maximale leeftijd wordt gevonden.

Lever de aangepaste en werkende code, gebruik de naam leeftijd-<jouw-naam>.py

JSON Leeftijd en naam

Gebruik de code van de vorige opdracht, maar zorg dat de functie twee waarden returned; de hoogste leeftijd en de naam van de persoon met de hoogste leeftijd.

De laatste twee regels van de code worden.

naam, leeftijd = vind_oudste_persoon(json_data)
print(f'De oudste persoon is {naam} met de leeftijd van {leeftijd} jaar.') 

Pas de functie aan zodat de naam en leeftijd worden afgedrukt.

Inleveren

Aangepaste code json4-<jouw-naam>.py.

API and JSON

We hebben de volgende code

import requests
import json

def vind_langste_username():
    # Verzend een GET verzoek naar de JSONPlaceholder API
    response = requests.get("https://jsonplaceholder.typicode.com/users")
    
    # Zet de JSON response om naar een Python object
    data = json.loads(response.text)

    # Initieer de lengte variabele voor de langste gebruikersnaam en de bijbehorende gebruiker
    max_len = 0
    user_met_max_len = ''

    # TODO: Schrijf hier de code die door de data loopt, 
    #       de lengtes van de gebruikersnamen vergelijkt en de langste gebruikersnaam en bijbehorende gebruiker vindt

    return user_met_max_len, max_len

# Test de functie
naam, lengte = vind_langste_username()
print(f'De gebruiker met de langste gebruikersnaam is {naam} met een lengte van {lengte} karakters.')  

Deze code laadt een JSON-bestand via een API. Vervolgens moet je de langste naam selecteren. Vul daarvoor de code aan.

Let op, je hebt de library requests nodig (import requests) deze library moet je waarschijnlijk installeren.

Dat doe je met het volgende commando.

pip install requests

Pip is de installer voor Python (zoals composer voor PHP).

Gebruik alle hulpbronnen, maar zorg dat je de code kan uitleggen.

Inleveren

Aangevulde werkende code, api-<jouw-naam>.py


 

Flask installatie

Met Python kan je ook web applicaties maken. Daarvoor zijn twee bekende frameworks beschikbaar, Django en Flask.

Django is een beetje de grote broer van Flask. Flask is eenvoudiger en beter geschikt voor wat eenvoudigere web applicaties.

Flask heeft niet echt een MVC-structuur, maar heeft wel routing, een mooie template engine en database-integratie.

Wij gaan kennismaken met Flask en zullen kijken naar routing en de (Jinja) template engine van Flask.

Maar eerst installeren.

Installatie

We hebben Python al geïnstalleerd (heb je dat niet meer vraag dan Chat GPT hoe je Python moet installeren of kijk in Python L1).

Met pip installeer je Flask:

pip install flask

Maak een map waarin je jouw Flask project gaat maken, en noem die map bijvoorbeeld mijFirstFlask.

Open de nieuwe folder in VCS.

De eerste stap

Het eerste begin

  1. Maak een nieuw Flask-project en maak een templates-map aan in de projectdirectory. Hierin plaatsen we de HTML-templates.

  2. Maak een nieuw Python-bestand, bijvoorbeeld app.py, en plaats het in de projectdirectory.

  3. Open het Python-bestand (app.py) met een teksteditor en voeg de volgende code toe:

    from flask import Flask, render_template
    
    app = Flask(__name__)
    
    @app.route('/')
    def home():
        return render_template('index.html')
    
    if __name__ == '__main__':
        app.run(debug=True)
  4. Maak een nieuw HTML-bestand in de templates-map, index.html, en open het met een teksteditor.

    Voeg deze HTML-code toe aan het index.html-bestand en zet achter Welkom jouw naam.

    <!DOCTYPE html>
    <html>
    <head>
        <title>Mijn Flask-project</title>
    </head>
    <body>
      <h1>Welkom <vul hier jouw naam in> bij mijn Flask-project!</h1>
        <p>Dit is een basisstructuur voor een Flask-project.</p>
    </body>
    </html>
  5. Sla zowel het Python-bestand (app.py) als het HTML-bestand (index.html) op.

  6. Ga naar de opdrachtprompt of terminalvenster en navigeer naar de projectdirectory waar het Python-bestand zich bevindt.

  7. Voer het volgende commando in: python app.py (of python3 app.py als je meerdere Python-versies hebt geïnstalleerd).

  8. Flask start de ontwikkelingsserver en geeft een URL weer, bijvoorbeeld http://127.0.0.1:5000/.

  9. Open de weergegeven URL in je webbrowser en je zou de inhoud van het index.html-bestand moeten zien, inclusief de welkomstboodschap.

Als je deze boodschap ziet, betekent dit dat Flask correct is geïnstalleerd en functioneert. Je kunt de boodschap in de hello-functie wijzigen naar elk gewenst bericht.

Flask form

In deze opdracht ga je in Flask je een eenvoudige webpagina maken met een formulier. In het formulier vraag je de gebruiker om zijn naam en vervolgens gebruik je die naam voor een begroeting.

  1. Maak een nieuw Python-bestand, bijvoorbeeld app.py, en open het met een teksteditor.

  2. Voeg de volgende code toe aan het Python-bestand:

python
from flask import Flask, render_template, request

app = Flask(__name__)

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/greet', methods=['POST'])
def greet():
    name = request.form.get('name')
    return render_template('greet.html', name=name)

if __name__ == '__main__':
    app.run(debug=True)
    
  1. Maak een templates-map in dezelfde directory als het Python-bestand.

  2. Maak een nieuw HTML-bestand genaamd index.html in de templates-map en open het met een teksteditor.

  3. Voeg de volgende code toe aan het index.html-bestand:

<!DOCTYPE html>
<html>
<head>
    <title>Flask Opdracht</title>
</head>
<body>
    <h1>Vul je naam in:</h1>
    <form action="/greet" method="POST">
        <input type="text" name="name" required>
        <input type="submit" value="Verzenden">
    </form>
</body>
</html>
  1. Maak een nieuw HTML-bestand genaamd greet.html in de templates-map en open het met een teksteditor.

  2. Voeg de volgende code toe aan het greet.html-bestand:

<!DOCTYPE html>
<html>
<head>
    <title>Flask Opdracht</title>
</head>
<body>
    <h1>Hallo, {{ name }}!</h1>
</body>
</html>
  1. Sla zowel het Python-bestand (app.py), het index.html-bestand als het greet.html-bestand op.

  2. Ga naar de opdrachtprompt of terminalvenster en navigeer naar de projectdirectory waar het Python-bestand zich bevindt.

  3. Voer het volgende commando in: python app.py.

  4. Flask start de ontwikkelingsserver en geeft een URL weer, http://127.0.0.1:5000/.

  5. Open de weergegeven URL in je webbrowser en je zou een formulier moeten zien waar je je naam kunt invullen en verzenden.

  6. Nadat je op "Verzenden" hebt geklikt, zou je begroet moeten worden met de boodschap "Hallo, [naam]!" waarbij [naam] de ingevoerde naam is.

Met deze eenvoudige opdracht kun je een formulier maken in Flask en de ingevoerde naam gebruiken om een begroeting weer te geven. Je kunt deze opdracht verder aanpassen en uitbreiden met meer functionaliteit en stijling naar wens.

Zorg ervoor dat je begrijpt hoe dit werkt, want in een volgende opdracht moet je zelf een formulier maken.

JINJA

De HTML-template is een zogenaamde JINJA template. In een JINJA template kan je python variabelen kan je afdrukken door de variabelen tussen {{ }} te zetten.

Als je (via ChatGPT) meer informatie wilt geef dan aan dat je in Flask met een JINJA template werkt.

Inleveren

  1. Schermafdruk van de gehele browser van de pagina waarin je de naam moet invullen, en
  2. schermafdruk van de gehele browser van de pagina waarin de boodschap wordt getoond.

Form aanpassen

Neem de code die je bij de vorige opdracht hebt gemaakt als uitgangspunt.

Pas de code die aan de route /greet is verbonden aan:

@app.route('/greet', methods=['POST'])
def greet():
   current_time = datetime.now().strftime('%H:%M:%S') current_date = datetime.now().strftime('%Y-%m-%d') name = request.form.get('name') return render_template('greet.html', name=name)


Je ziet dat er twee variabelen zijn bijgekomen, current_time en current_date.

In de HTML template moet je deze waarden afdrukken. Je moet daarvoor twee dingen doen:

  1. Zorg ervoor dat je de waarden current_time en current_date doorgeeft aan de HTML-template.
    Pas daarvoor de laatste regel van de def greet():  aan.
    Gebruik Internet of ChatGPT om uit te vinden hoe dat moet.
  2. Pas de Jinja template aat en zorg ervoor dat de datum en tijd wordt afgedrukt.

Inleveren

  1. Aangepaste code in app.py (waar de def greet() in staat, en
  2. aangepaste Jinja template, waar de datum en tijd wordt afgedrukt.

Project Boekenrecensie-applicatie

Doel:

Het creëren van een webapplicatie waar gebruikers boeken kunnen zoeken, beoordelen en recensies kunnen achterlaten. De app kan ook boekgegevens ophalen van een externe API zoals Google Books.

Benodigdheden:

Stappen:

  1. Opzetten van de Flask-omgeving:

    • Maak een nieuw Flask-project en stel de basisstructuur op.
    • Zorg voor routes en templates voor de belangrijkste pagina's (Home, Zoeken, Boekdetails, Recensies).
  2. Database Integratie:

    • Ontwerp een database-schema voor het opslaan van gebruikers, boeken en recensies.
    • Gebruik SQLAlchemy om je database te integreren met Flask.
    • Maak modellen voor elke tabel in je database.
  3. Gebruikersauthenticatie:

    • Implementeer gebruikersregistratie en -authenticatie.
    • Zorg ervoor dat gebruikers kunnen inloggen en hun eigen recensies kunnen achterlaten.
  4. Integratie van een Boeken-API:

    • Kies een externe boeken-API zoals Google Books.
    • Implementeer functionaliteit waarmee gebruikers boeken kunnen zoeken via de API.
    • Laat basisinformatie over de boeken zien en bied de mogelijkheid om deze toe te voegen aan je eigen database.
  5. Recensie Functionaliteit:

    • Sta gebruikers toe recensies en beoordelingen voor boeken achter te laten.
    • Toon deze recensies op de boekdetailpagina's.
  6. Frontend Ontwikkeling:

    • Ontwerp de frontend met HTML/CSS.
    • Gebruik Bootstrap of een vergelijkbaar framework om de ontwikkeling te versnellen en de app responsief te maken.
  7. Extra Features (optioneel):

    • Voeg functionaliteiten toe zoals het aanbevelen van boeken op basis van beoordelingen of genres.
    • Implementeer een systeem voor gebruikers om boeken aan hun favorieten toe te voegen.
  8. Testen en Debuggen:

    • Test de applicatie grondig.
    • Zorg voor foutafhandeling en zorg dat de app soepel werkt.

Opdracht

  1. Maak een planning en verdeel de taken en bepaal het benodigd aantal uren. Laat de planning goedkeuren.
  2. Nadat een grof ontwerp. Oftewel een ontwerp op hoofdlijnen.
  3. Maak de code met Python en Flask. Zorg dat alles werkt en dat de GUI er netjes uit ziet. Gebruik een CSS framework zoals Bootstrap.

Project RSVP

Inleiding

Een RSVP-applicatie is een soort software of webapplicatie die wordt gebruikt voor het beheren van uitnodigingen en reacties (RSVP's) voor evenementen. RSVP staat voor "Répondez s'il vous plaît", een Franse uitdrukking die "Antwoord alstublieft" betekent. In de context van evenementenplanning, wordt het gebruikt om aan te geven dat de genodigden worden gevraagd om te bevestigen of ze al dan niet aanwezig zullen zijn.

Kernfuncties van een RSVP-applicatie:

  1. Uitnodigingen Versturen:

    • De organisator van een evenement kan digitale uitnodigingen versturen naar de gastenlijst. Dit kan via e-mail of via een link naar de RSVP-applicatie.
  2. Reacties Beheren:

    • Genodigden kunnen hun aanwezigheid bevestigen of afwijzen via de applicatie. Ze kunnen vaak ook specifieke voorkeuren of opmerkingen toevoegen, zoals dieetbeperkingen of plus-één informatie.
  3. Evenementendetails:

    • De applicatie toont details over het evenement, zoals datum, tijd, locatie en eventuele andere relevante informatie.
  4. Gastenlijstbeheer:

    • De organisator kan de gastenlijst en de reacties in real-time volgen. Dit helpt bij het plannen van de logistiek van het evenement, zoals catering, zitplaatsen en accommodatie.
  5. Communicatie:

    • De applicatie kan worden gebruikt voor verdere communicatie met de gasten, zoals updates over het evenement, herinneringen of post-evenement bedankjes.
  6. Integraties:

    • Geavanceerde RSVP-applicaties kunnen integreren met kalenderapps, e-maildiensten, sociale media en zelfs ticketing-systemen.

Gebruiksscenario's:

Opdracht

  1. Maak een planning en verdeel de taken en bepaal het benodigd aantal uren. Laat de planning goedkeuren.
  2. Nadat een grof ontwerp. Oftewel een ontwerp op hoofdlijnen.
  3. Maak de code met Python en Flask. Zorg dat alles werkt en dat de GUI er netjes uit ziet. Gebruik een CSS framework zoals Bootstrap.