0%

Abschlussprojekt: der Leselisten-Dienst und sein Client

Nimm es mit nach Hause

Diese Lektion hat kein Check my work. Die Website kann das Projekt sehen, das du hier gespeichert hast, und nichts von dem, was auf deinem eigenen Computer passiert. Der Lauf unten, dein Server in einem und dein Client in einem anderen, ist der Lauf, den dir die Website nie zeigen konnte, und er gehört dir allein. Die Quizfragen fragen, warum jeder Schritt da ist, und wenn du sie bestehst, ist die Lektion abgeschlossen.

Was mitreist

Öffne README.md im Tab Project und lies sie jetzt. Sie ist die Seite, die jemand anderes zuerst lesen würde: was die beiden Programme sind, wie man sie einmalig einrichtet, wie man sie in zwei Terminals ausführt, was die Exit-Codes des Clients bedeuten und was nicht mitreist. Sie wurde für dieses Projekt geschrieben, und du kannst sie bearbeiten; nichts prüft sie.

Wenn du das Projekt jemandem übergibst, oder dir selbst auf einem anderen Computer, gehen diese Dateien mit:

  • der Code: reading_server.py, reading_client.py, http_adapter.py, fakes.py und wire.py, der von Hand geschriebene Client der frühen Kapitel;

  • die Tests in tests/;

  • SERVICE_CONTRACT.md, die Vereinbarung, der beide Programme folgen;

  • README.md und requirements.txt.

Manches reist nie mit: .venv, __pycache__ und .pytest_cache, weil jeder Computer sie aus dem Rezept und dem Code selbst erzeugt, wie Python in der Praxis gezeigt hat. Auch reading_cache.json bleibt zurück. show schreibt sie in den Ordner, in dem der Client gerade läuft, sie enthält deine eigenen Kopien von Antworten deines eigenen Servers, und du kannst sie gefahrlos löschen. pl_http.py hat auf der Website das zweite Terminal gespielt; falls dein Download es enthält, brauchst du es nicht.

Was davon gehört in den Ordner, den du jemand anderem übergibst?

Öffne requirements.txt. Es legt zwei Pakete fest: requests==2.34.2, das der Client importiert, und pytest==9.1.1, das die Tests ausführt. Der Server braucht nichts außer der Standardbibliothek. Auf der Website kamen beide mit dem Python der Lektion; auf deinem Computer installierst du sie selbst.

Herunterladen und neu aufbauen

Benutze Download project in der Projekt-Werkzeugleiste, während du angemeldet bist, und entpacke das Archiv in einen neuen, leeren Ordner. Öffne ein Terminal, wechsle mit cd in diesen Ordner und baue dort die Umgebung. Die Befehle sind die aus README.md. Sie rufen das Python der direkt auf, also muss nichts aktiviert werden:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m pytest -q

Die Tests, die auf der Website bestanden haben, sollten auch hier bestehen: Sie brauchen kein Netzwerk und keinen Server, und dafür hat Lektion 4 gesorgt. Das Projekt braucht Python 3.10 oder neuer, wie README.md sagt.

Die -Befehle sind die, die der Kurs ausgeführt hat. Die Tabs für Windows und folgen README.md und wurden auf diesen Systemen noch nicht ausgeführt. Wenn py unter Windows nicht gefunden wird, benutze stattdessen python.

Zwei Terminals

Starte im ersten Terminal, im Projektordner, den Server. Seine erste Zeile ist listening on 127.0.0.1: und eine , und dann wartet er:

.venv/bin/python reading_server.py

Der Server bearbeitet sechs Verbindungen und hält dann von selbst an. Er wartet auf jede höchstens 30 Sekunden, und eine Wartezeit, die ohne Client endet, verbraucht trotzdem eine der sechs, also halte das zweite Terminal bereit. --max-connections (1 bis 10) und --idle-timeout (bis zu 60 Sekunden) ändern beides, wie README.md sagt.

Öffne ein zweites Terminal, wechsle in denselben Ordner und führe die sieben Client-Befehle aus README.md aus, mit der Zahl aus der ersten Zeile des Servers anstelle von PORT:

.venv/bin/python reading_client.py list --base-url http://127.0.0.1:PORT
.venv/bin/python reading_client.py add --base-url http://127.0.0.1:PORT --token tok-ana-writes-7Qx2 --title Piranesi --author "Susanna Clarke"
.venv/bin/python reading_client.py show 3 --base-url http://127.0.0.1:PORT
.venv/bin/python reading_client.py show 3 --base-url http://127.0.0.1:PORT
.venv/bin/python reading_client.py update 3 --base-url http://127.0.0.1:PORT/v0 --token tok-ana-writes-7Qx2 --title "Piranesi (paperback)" --author "Susanna Clarke"
.venv/bin/python reading_client.py delete 3 --base-url http://127.0.0.1:PORT --token tok-ana-writes-7Qx2
.venv/bin/python reading_client.py list --base-url http://127.0.0.1:PORT

Als die kurseigene Version des Projekts diese Befehle auf einem Mac ausgeführt hat, endete jeder Befehl mit 0. Das update ging über den alten Pfad: Es gab followed 308 from http://127.0.0.1: mit dem Port und /v0/books/3 auf der Standardfehlerausgabe aus und sein Ergebnis auf der Standardausgabe. Das zweite show hat nichts gesendet. Nach dem letzten list hat der Server served its connections and stopped ausgegeben und sich beendet, nachdem er 7 Anfragen über 6 Verbindungen bedient hatte, und reading_cache.json blieb im Ordner zurück.

Sieben Client-Befehle, und der Server, der nach sechs Verbindungen anhält, hat direkt nach dem siebten Befehl angehalten. Warum?

Was die Website nicht sehen kann

Nichts aus diesem Lauf kommt zu Python Land zurück. Es gibt kein Token zum Einfügen und keine Prüfung zu bestehen, und keine Lektion fragt nach einem Ergebnis. Die Bücher, die du hinzugefügt hast, lebten im Speicher deines Servers und waren weg, als er angehalten hat.

Der Server lauscht nur auf 127.0.0.1. Jede Anfrage zwischen deinen beiden Programmen bleibt innerhalb deines Computers, auf der , also kann sich kein anderer Rechner mit ihm verbinden, und du musst nie eine Firewall dafür öffnen.

Was weiß Python Land nach dem Lauf in zwei Terminals darüber?

Dir gehören jetzt ein getesteter -Dienst und ein Client, und du weißt, was jede Schicht darunter tut. Das letzte Kapitel nennt, wohin dieses Wissen führt.