Parana
Anmeldungsdatum: 10. Mai 2022
Beiträge: Zähle...
|
Hallo. Ich nutze Ubuntu schon ein paar Jahre auf dem Desktop. Jetzt habe ich mir einen kleinen VPS gemietet um mich auch ein wenig intensiver mit der Server Version zu befassen. Zusätzlich möchte ich gleich noch ein bisschen Python lernen. Mein Server läuft und Nginx auch. Jetzt stellt sich mir eine grundsätzliche Frage: Da ich ja gerne Python lernen möchte, ist es sinnvoll direkt ein Python Web-Framework, wie Flask oder Django zu installieren und zu nutzen, richtig? Ich habe jetzt schon einiges dazu gelesen. Was ich noch nicht komplett verstanden habe ist, ob ich das Python Web Framework zwingend benötige um Python Anwendungen im Web auszuführen oder ob es nur eine Hilfestellung ist. Bisher habe ich Frameworks immer eher als eine Hilfe bei der Erfüllung komplexerer Aufgaben verstanden. Also fertige Snippets, Fragmente von Code. Aber bei meiner Recherche zu diesem Thema finde ich wieder und wieder als ersten Schritt ein Python Web Framework zu installieren. Sozusagen als Grundvoraussetzung. Also: Um eine simple HTML Webseite zu erstellen und Serverseitig ein bisschen Python auszuführen brauche ich ein Python Web Framework? Oder kann ich meine Python Files ohne Einschränkung auch direkt aus dem HTML Code aufrufen, ohne Framework?
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5077
|
Du kannst durchaus auch ohne einem professionellen Framwork rein mit der standard library eine Webanwendung anbieten, zu empfehlen ist das aber keineswegs. Zum experimentieren bzw fuer Lern- und Testzwecke bietet sich http.server an, damit kannst du zumindest request handler & co. nutzen, andernfalls musst du mit Sockets arbeiten, was sehr muehsam werden koennte.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Python lernen und Backend-Entwicklung sind IMHO zwei verschiedene Paar Schuhe - man muss sich natürlich so oder so Grundlagen aneignen, aber wenn man sich auf einen Bereich beschränkt, kann es einem passieren, dass man bestimmte Features einer Sprache nie kennen lernt - und Frameworks engen die Features einer Sprache, die man nutzt, meist noch weiter ein. Es gibt da verschiedene Ansätze - man kann das für nicht öffentlich exponierte, einfache Projekte z.B. mit https://docs.python.org/3/library/http.server.html lösen - dann gibt es das Web_Server_Gateway_Interface mit zig Frameworks, die das unterstützen und falls man asyncio nützlich findet das Asynchronous Server Gateway Interface - das nutzen z.B. fastapi (baut auf starlette auf) und AIOHTTP). Parana schrieb: Oder kann ich meine Python Files ohne Einschränkung auch direkt aus dem HTML Code aufrufen, ohne Framework?
Du kannst mit HTML (und JS) Requests absetzen und mit einem beliebigen Dienst antworten, der einen entsprechenden Port offen hat und darauf reagiert. Man kann auch soweit gehen Python nach JS zu transpilieren, um es im Browser auszuführen: http://pyjs.org/
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: Zähle...
|
seahawk1986 schrieb: (...) einfache Projekte z.B. mit https://docs.python.org/3/library/http.server.html lösen
http.server ist nicht für den Produktiv-Einsatz geeignet, wie es ja auch in der Doku direkt am Anfang im roten Warnhinweis beschrieben wird. Zum Üben okay, aber bitte kein Projekt (egal von welcher Größe) damit anfangen. Wenn es übersichtlich bleiben soll, sind die üblichen Verdächtigen Flask oder Bottle (sog. Micro-Frameworks). Da hat man mehr Freiheiten im Hinblick auf die verschiedenen Aspekte der Web-Entwicklung, während Django mehr so ein Alles-Aus-Einer-Hand Paket ist. Letztlich sollte aber dennoch viel auf bewährte Module gesetzt werden, da bekanntlich der Sicherheitsaspekt eine erhebliche Bedeutung einnimmt und selbst gebastelte Lösungen einem gerne mal früher oder später auf die Füße fallen.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo,
Da ich ja gerne Python lernen möchte, ist es sinnvoll direkt ein Python Web-Framework, wie Flask oder Django zu installieren und zu nutzen, richtig?
Nein. Wenn du die Grundlagen von Python nicht beherrschst und nicht wirklich einen Plan der Objektorientierung von Python sowie Klassen und deren Methoden hast, dann kannst du gar nicht verstehen, was das Webframework überhaupt macht. Wenn die die Grundlagen gelernt hat, z.B. mit dem offiziellen Python-Tutorial, dann kannst du auch zu den Webframeworks übergehen.
Was ich noch nicht komplett verstanden habe ist, ob ich das Python Web Framework zwingend benötige um Python Anwendungen im Web auszuführen oder ob es nur eine Hilfestellung ist.
Es geht theoretisch ohne - macht aber freiwillig keiner, sofern man nicht hochgradig masochistisch veranlagt ist.
Um eine simple HTML Webseite zu erstellen und Serverseitig ein bisschen Python auszuführen brauche ich ein Python Web Framework?
So ist es.
Ich nutze Ubuntu schon ein paar Jahre auf dem Desktop. Jetzt habe ich mir einen kleinen VPS gemietet um mich auch ein wenig intensiver mit der Server Version zu befassen. Zusätzlich möchte ich gleich noch ein bisschen Python lernen.
Zum Lernen und auch für Webanwendungen brauchst du keinen Server. Das geht genau so gut auf dem Desktop. Und wenn du auf realer Hardware Testen / Spielen willst, dann geht das auch sehr gut z.B. mit einem Raspberry Pi. Gruß, noisefloor
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
noisefloor schrieb:
Um eine simple HTML Webseite zu erstellen und Serverseitig ein bisschen Python auszuführen brauche ich ein Python Web Framework?
So ist es.
Es ist ja oft das Schicksal von einfachen und dann erfolgreichen Anwendungen, dass sie im Laufe der Zeit immer komplexer werden. Da ist es schon schön, wenn man frühzeitig passende Werkzeuge einsetzt, obwohl das am Anfang oft danach aussieht, dass man mit Kanonen auf Spatzen schießt. ☺
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo, Python Webframeworks folgen normalerweise dem WSGI Standard, das ist DER Standard für Python Webanwendungen. Wozu man auf jeden Fall ein Webframework nutzen will ist das Routing, spricht an eine Route (i.d.R. eine URL) eine Python Funktion zu binden. Das geht auch mit sehr kleinen Frameworks wie Bottle und die etwas größeren Flask einwandfrei. Die die kleinen Frameworks bieten dann i.d.R. auch noch ein paar Sachen wie Umgang mit Form / GET / POST Daten, Static File Handling etc. Django kann noch viel mehr, das hat ganze viele "batteries included". Aber, wie rklm schon ganz richtig sagt, wenn man ein bisschen mehr will kommt man relativ schnell an den Punkt, wo "batteries included" ganz nützlich ist. Gruß, noisefloor
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
noisefloor schrieb: Python Webframeworks folgen normalerweise dem WSGI Standard, das ist DER Standard für Python Webanwendungen.
Ich würde das vom Einsatzzweck abhängig machen - wenn man viele Clients bedienen will und dabei längere Zeit auf Dinge warten muss, ist ASGI besser geeignet, weil die einzelnen Worker mehr in der selben Zeit machen können - das wird z.B. wichtig, wenn man Daten über Websockets mit den Clients austauschen will, wo man die Verbingungn zu den einzelnen Clients lange halten muss und das ab einer gewissen Anzahl nicht mehr sinnvoll mit zusätzlichen Threads erschlagen kann - ein klassisches Anwendungsbeispiel sind Dashboards, die man regelmäßig mit aktuellen Daten versorgen will - statt da regelmäßige Requests vom Client an den Server zu machen, kann man die Websocketverbindung aufrecht erhalten und der Server verschickt neue Daten, wenn sie verfügbar sind.
|
Parana
(Themenstarter)
Anmeldungsdatum: 10. Mai 2022
Beiträge: 10
|
Hallo. Erstmal vielen Dank für die Antworten. Da sich der Beitrag gleich so gut entwickelt hat, habe ich erstmal abgewartet mit meiner Antwort, um die Dynamik nicht zu stören. ☺ Zu http.server habe ich eine Frage: Wozu würde ich den denn benötigen? Bei mir läuft ja schon Nginx. Oder sind das zwei Paar Schuhe oder brauche ich für Python einen speziellen Web Server?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10978
|
Parana schrieb: Zu http.server habe ich eine Frage: Wozu würde ich den denn benötigen? Bei mir läuft ja schon Nginx. Oder sind das zwei Paar Schuhe oder brauche ich für Python einen speziellen Web Server?
Nicht zwingend einen Webserver, aber zumindest etwas, das den Python-Code auf Zuruf mit den übergebenen Parametern ausführt und das Ergebnis an den Webserver weiterreicht, der das an den Client ausliefert. Für die Entwicklung ist es oft einfacher, wenn der Webserver ebenfalls in Python implementiert ist, weil man dann nur einen Prozess braucht (z.T. reagieren Webserver etwas allergisch, wenn der Socket plötzlich verschwindet, den sie für einen Proxy nutzen) - im Idealfall kann der Entwicklungsserver beobachten, ob sich etwas am Quellcode verändert hat und reagiert dann darauf, indem er den Code automatisch neu lädt - damit kann man schneller Änderungen ausprobieren als wenn man jedes Mal von Hand einen Neustart auslöst. Für den Einsatz der fertigen Anwendung stellt man üblicherweise einen Webserver wie nginx davor, der z.B. gecatchte Inhalte und statische Dateien mit guter Performance ausliefern kann, sich um SSL-Verschlüsselung, ggf. Authentifizierung usw. kümmert und leitet die Requests für Dinge, die der Python-Code erledigen soll an dessen Kontrollprozess weiter - wie das Funktioniert findest du in der Dokumentation zu den jeweiligen Projekten, z.B. für uWSGI: https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#putting-behind-a-full-webserver, https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
seahawk1986 schrieb:
Für den Einsatz der fertigen Anwendung stellt man üblicherweise einen Webserver wie nginx davor, der z.B. gecatchte Inhalte und statische Dateien mit guter Performance ausliefern kann, sich um SSL-Verschlüsselung, ggf. Authentifizierung usw. kümmert und leitet die Requests für Dinge, die der Python-Code erledigen soll an dessen Kontrollprozess weiter - wie das Funktioniert findest du in der Dokumentation zu den jeweiligen Projekten, z.B. für uWSGI: https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html#putting-behind-a-full-webserver, https://uwsgi-docs.readthedocs.io/en/latest/Nginx.html
In Produktion nutzt man dann oft auch noch einen Loadbalancer wie z.B. HAProxy vor den Webserver - das hilft die Anwendung zu skalieren und, wenn man das Backend aktualisieren will und der Betrieb störungsfrei weiter laufen soll. Der HAProxy kann dann auch die SSL-Terminierung übernehmen und hat noch so einiges auf Lager.
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo,
Oder sind das zwei Paar Schuhe oder brauche ich für Python einen speziellen Web Server?
Eigentlich bringen alle Webframeworks einen eigenen Server mit, der primär zum Entwickeln gedacht ist und dafür auch perfekt geeignet ist. Der Server läuft lokal auf deinem Rechner. Später, wenn du die Anwendung auf eine "richtigen" Server deployt wird ist das gängige Setup eine WSGI Applikationssserver wie gunicorn (oder uwsgi) und davor nginx als Reverse Proxy. Für die gängigen Webframeworks findest du dazu auch bergeweise Doku im Netz. Gruß, noisefloor
|