Ga naar hoofdinhoud

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

Na les 4 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"])

Draai het met python lees_sessies.py. Je server hoeft er niet voor te draaien.

Heb je opdracht 2 van les 2 gedaan, dan staat jouw eigen sessie er ook bij, bovenaan, met de naam die je op /docs invulde.

Hetzelfde lijstje dat /sessies in les 3 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.

In je eigen gastenboek staat ook een gebruikers.db, sinds Registreren: een account opslaan. Daarin staan de wachtwoorden van je gebruikers, leesbaar, tot je de reeks Wachtwoorden veilig opslaan doet, en daarna hun hashes. Die deel je nog minder.

Controlevraag
Je stuurt een klasgenoot alleen gastenboek.db, en sessies.db niet. Wat kan hij daarmee?
Kies wat jij denkt. Bij het goede antwoord zie je de uitleg.

Er gaat iets mis​

lees_sessies.py print niets, terwijl twee.py uit les 3 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​

Kopieer het sessie-id van Sara uit de uitvoer van lees_sessies.py. Je stopt je server, gooit sessies.db weg en start de server opnieuw. Daarna stuur je GET /ik met dat sessie-id als cookie, zoals sessies.py in les 3 deed:

import httpx

ik = httpx.get("http://127.0.0.1:8000/ik", cookies={"sessie_id": "plak-hier-het-sessie-id"})
print(ik.json())

Vraag: wat antwoordt de server?

Tip

Waar zoekt /ik het sessie-id op?

Antwoord

{'naam': 'onbekend'}. De cookie is dezelfde als eerst, 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 6.

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