Ga naar hoofdinhoud

Wat je server laat zien: wat er in je map staat

Na les 3 geeft je server geen lijst en geen sessies meer weg. Maar je server is niet de enige weg naar je gegevens. Ze staan ook in bestanden, naast je code. Deel je je projectmap, als zip met een klasgenoot of op GitHub, dan deel je die bestanden mee.

Kijk wat er in sessies.db staat​

Maak naast main.py een script lees_sessies.py. Het opent de database zelf, zonder server:

from sqlitedict import SqliteDict

with SqliteDict("sessies.db") as sessies:
for sessie_id, sessie in sessies.items():
print(sessie_id, sessie["naam"])

Uitvoer, met andere sessie-id's bij jou:

17fc855565c554ac6a2fc8c071a48e89 Sara
916312710b4a64610d1a100578050e18 Alex

Hetzelfde lijstje dat /sessies in les 2 weggaf. Daar heb je geen endpoint voor nodig: wie het bestand heeft, heeft de sessie-id's. En met een sessie-id is hij voor je server die bezoeker, zolang je server draait met deze sessies.db.

Wat er nog meer in je map staat​

Kijk in het Explorer-paneel van VS Code. Naast je code en je scripts staat meer dan je zelf maakte:

Bestand of mapWat erin staatDelen?
main.py en je scriptsje codeja
static/ en templates/, als je die hebtje HTML, CSS en afbeeldingenja
gastenboek.dballes wat je bezoekers schreven, met hun namennee
sessies.dbde sessie-id's van je bezoekersnee
.venv/de virtual environment met alle packagesnee
__pycache__/bestanden die Python zelf maakt om sneller te startennee

Een .db-bestand hoort bij je server, niet bij je code. De berichten zijn van je bezoekers, en een sessie-id is een sleutel. .venv bevat geen geheimen, maar is groot en werkt alleen op jouw computer: wie je project krijgt, maakt zelf een virtual environment. __pycache__ maakt Python opnieuw als het nodig is.

Heb je later accounts, zoals in de reeks Wachtwoorden veilig opslaan, dan staat er ook een gebruikers.db bij, met de wachtwoorden van je gebruikers of hun hashes. Die deel je nog minder.

Er gaat iets mis​

lees_sessies.py print niets, terwijl twee.py uit les 2 wel twee namen gaf.

Oorzaak: het script draait in een andere map dan je server. SqliteDict("sessies.db") zoekt het bestand in de map waarin je het script start. Bestaat het daar niet, dan maakt hij stil een nieuwe, lege database aan.

Oplossing: zet lees_sessies.py in dezelfde map als main.py, draai het vanuit de terminal in die map, en gooi de lege sessies.db in de andere map weg.

Opdrachten​

Opdracht 1: Predict - Sessies weg​

Je stopt je server, gooit sessies.db weg en start de server opnieuw. Sara's Client uit twee.py stuurt daarna GET /ik, met haar oude cookie.

Vraag: wat antwoordt de server?

Tip

Waar zoekt /ik het sessie-id op?

Antwoord

{'naam': 'onbekend'}. De cookie staat nog in de Client, maar het sessie-id staat niet meer in sessies.db. Voor de server is Sara een nieuwe bezoeker. Een sessie bestaat dus alleen zolang de server hem kent, en wie sessies.db heeft, heeft alle sessies die je server kent.

Opdracht 2: Investigate - Een zip voor je docent​

Je wilt je project inleveren als zip. Welke bestanden en mappen uit de tabel stop je erin, en welke niet?

Antwoord

Wel: main.py, je scripts als je docent ze wil zien, en static/ en templates/ als je project die heeft. Niet: de .db-bestanden, .venv/ en __pycache__/. Je docent heeft je code nodig om te zien wat je bouwde, niet de berichten en sessies van je bezoekers. Hoe je dat bij elke zip en elke upload goed doet, zie je in les 5.

Door naar les 5: een .gitignore en een nette zip.