38. Lektion: Webserver: Unterschied zwischen den VersionenAus Attraktor Wiki
Version vom 7. Dezember 2023, 09:56 UhrInhaltsverzeichnisWebserverWlan einrichtenimport network # Wlan Verbindung herstellen wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('connecting to network...') wlan.connect('ssid', 'key') while not wlan.isconnected(): pass print('network config:', wlan.ifconfig()) Das Webserver Packet phewFür den Raspberry Pi Pico W gibt es ein Packet, das alles enthält, was zur Einrichtung eines Webservers auf dem Pico erforderlich ist. Es heißt "phew" und ist von Github unter https://github.com/pimoroni/phew zu beziehen. Das Archiv muss entpackt und dann das Unterverzeichnis "phew" ins Filesystem des Pico kopiert werden.
from phew import server # hier werden die auszuliefernden Webseiten definiert. Siehe nächste Codebox. server.run() Webseiten generierenEine Webseite wird erstellt indem eine Funktion definiert wird, die den Inhalt des Response zurück gibt. Der Funktion muss request übergeben werden.
Mit Decorator:@server.route("/random", methods=["GET"]) def random_number(request): import random min = int(request.query.get("min", 0)) max = int(request.query.get("max", 100)) return str(random.randint(min, max)) Es muss dem Decorator die Route - die Zeichen, die in der URL hinter der IP-Adresse stehen - und die HTTP-Methode (GET oder POST) ünergeben werden. Die Definition folgt in der nächsten Zeile. Mit Route-Tabelle:# Webseiten definieren def random_number(request): import random min = int(request.query.get("min", 0)) max = int(request.query.get("max", 100)) return str(random.randint(min, max)) def info_site(request): return "<h1>Infoseite vom Raspberry Pi Pico W</h1>" # Routing Tabelle server.add_route("/random", random_number, methods=["GET"]) server.add_route("/info", info_site, methods=["GET"]) Response erzeugenDer Response ist ein String der alle Informationen enthält die an den Client zurückgegeben werden sollen.
Einfacher TextHier steht hinter return ein String, der den Response enthält. Dieser kann, aber muss nicht, HTML-Auszeichnungen enthalten. Es kann ein kurzer Text sein, oder auch eine umfangreiche Webseite mit HTML-Header und -body. Als zweites Argument kann der HTTP-Code - hier 404 - agegeben werden. @server.catchall() def catch_all(request): return "<h1>Hallo, diese Webseite gibt es nicht!</h1>", 404 # oder: @server.route("/info", methods=["GET"]) def info_seite(request): content = ''' <html> <header> .... </header> <body> .... </body> </html> ''' return content, 200 # oder mit f-string: @server.route("/test", methods=["GET"]) def test_seite(request): version = 1.0.0 return f"Aktuelle Version {version}", 200 In einer VariablenAus einer DateiUm den Response aus einer Datei zurück zu geben gibt es die Funktion render_template(). Wenn die Seite nicht existiertDer Server gibt üblicherweise die der Route zugeordnete Webseite zurück. Wenn eine Webseite angefordert wird, die nicht existiert, wird die Servermethode catchall() aufgerufen. @server.catchall() def catch_all(request): return "<h1>Hallo, diese Webseite gibt es nicht!</h1>", 404 # oder aus einer Datei in /htdocs: HTDOCS = 'htdocs/' @server.catchall() def catch_all(request): return render_template(HTDOCS + 'error_404.html') Beispielfrom phew.template import render_template from os import stat HTDOCS = 'htdocs/' # Hier ist der "/" wichtig, sonst funktioniert es nicht! from phew import server @server.route("/random", methods=["GET"]) def random_number(request): import random min = int(request.query.get("min", 0)) max = int(request.query.get("max", 100)) return str(random.randint(min, max)) @server.route("/info", methods=["GET"]) def info_site(request): return "<h1>Infoseite vom Raspberry Pi Pico W</h1>" @server.route("/test", methods=["GET"]) def test_site(request): return render_template(HTDOCS + "html-test_001.html") # return render_template("html-test_001.html") # return ''' # <h1>Überschrift</h1> # Dieses ist eine kleine HTML-Testseite. # <br> # Noch ist es nur ein einfacher Test! # ''' # return render_template("html-test_001.html") @server.catchall() def catch_all(request): return "<h1>Hallo, diese Webseite gibt es nicht!</h1>", 404 # return render_template(HTDOCS + index.html)
Lager
|