{"id":19088,"date":"2024-02-26T20:05:52","date_gmt":"2024-02-26T19:05:52","guid":{"rendered":"https:\/\/contabo.com\/blog\/?p=19088"},"modified":"2024-02-26T20:05:56","modified_gmt":"2024-02-26T19:05:56","slug":"python-webserver","status":"publish","type":"post","link":"https:\/\/contabo.com\/blog\/de\/python-webserver\/","title":{"rendered":"Aufsetzen eines Python Webservers f\u00fcr Tests &#8211; Anleitung"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1200\" height=\"630\" src=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing.jpg\" alt=\"python webserver - Head Image\" class=\"wp-image-19045\" srcset=\"https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing.jpg 1200w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing-600x315.jpg 600w, https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing-768x403.jpg 768w\" sizes=\"auto, (max-width: 1200px) 100vw, 1200px\" \/><\/figure>\n\n\n\n<p>Dieser Leitfaden soll Softwareentwicklern helfen, schnell einen lokalen Python-Webserver zum Testen einzurichten. Das meint einen lokalen Webserver mit Python, einer leistungsstarken und vielseitigen Programmiersprache. Ganz gleich, ob du eine neue Webanwendung entwickelst oder eine bestehende Anwendung testest: Zu verstehen, wie man einen lokalen Server betreibt, ist immer der erste Schritt. Unser Ziel ist es, dir praktische Schritte zu zeigen, wie du Python nutzen kannst, um Webinhalte direkt an deinen Browser zu liefern. Du wirst lernen, wie du einfachen Python-Code schreibst, um Webanfragen zu verwalten, Dateien bereitzustellen und deine Anwendungen in einer lokalen Entwicklungsumgebung zu testen. Am Ende dieses Tutorials wirst du wissen, wie du deine Webprojekte effizient auf einem Python-basierten Server ausf\u00fchren und testen kannst, indem du Werkzeuge und Befehle verwendest, die deinen Entwicklungsprozess vereinfachen. Lass uns loslegen und herausfinden, wie du Python f\u00fcr lokale Webserver-Tests nutzen kannst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-python-webserver-verstehen\">Python Webserver verstehen<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-definition-und-anwendungsfalle\">Definition und Anwendungsf\u00e4lle<\/h3>\n\n\n\n<p>Ein Python-Webserver ist ein Softwaresystem, das Webanfragen \u00fcber die HTTP- oder HTTPS-Protokolle verarbeitet und Webinhalte an Kunden ausliefert. Diese Server werden von vielen Entwicklern f\u00fcr verschiedene Zwecke eingesetzt, z. B. zum Testen von Webanwendungen in einer lokalen Umgebung, zur Entwicklung kleiner bis mittelgro\u00dfer Webanwendungen und zur Bereitstellung dynamischer Inhalte mit Frameworks wie Flask oder Django. Die Flexibilit\u00e4t und die einfache Skripterstellung machen Python-Webserver zu einer ausgezeichneten Wahl f\u00fcr schnelle Entwicklungszyklen W\u00e4hrend der Testphase werden schnelle Iterationen und sofortiges Feedback erm\u00f6glicht.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-vergleich-mit-apache-und-nginx\">Vergleich mit Apache und NGINX<\/h3>\n\n\n\n<p>Wenn es um die Wahl eines Webservers geht, h\u00e4ngt die Entscheidung oft von den spezifischen Anforderungen des Projekts ab. Hier ist ein kurzer Vergleich von Python Webservern mit traditionellen Optionen wie Apache und NGINX:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Funktion<\/td><td>Python Webserver&nbsp;<\/td><td>Apache&nbsp;<\/td><td>NGINX&nbsp;<\/td><\/tr><tr><td><strong>Setup<\/strong><\/td><td>Einfache Einrichtung mit minimalem Konfigurationsaufwand.<\/td><td>Erfordert eine komplexere Einrichtung und Konfiguration.<\/td><td>\u00c4hnlich wie Apache, aber f\u00fcr bessere Leistung optimiert.<\/td><\/tr><tr><td><strong>Flexibilit\u00e4t<\/strong><\/td><td>\u00c4u\u00dferst flexibel, ideal f\u00fcr Entwicklung, Tests und leichtgewichtige Anwendungen.<\/td><td>Hochgradig konfigurierbar, geeignet f\u00fcr eine breite Palette von Produktionsumgebungen.<\/td><td>Bietet hohe Effizienz und wurde f\u00fcr Szenarien mit hoher Parallelit\u00e4t entwickelt.<\/td><\/tr><tr><td><strong>Leistung<\/strong><\/td><td>Am besten geeignet f\u00fcr die Entwicklung und kleine Anwendungen.<\/td><td>Optimiert f\u00fcr hohe Leistung, skalierbar f\u00fcr gro\u00dfe Anwendungen.<\/td><td>Bekannt f\u00fcr hervorragende Leistung, insbesondere bei der effizienten Bew\u00e4ltigung hoher Traffic-Lasten.<\/td><\/tr><tr><td><strong>Anwendungsf\u00e4lle<\/strong><\/td><td>Perfekt f\u00fcr Tests, Entwicklung und die Bereitstellung dynamischer Inhalte in einer kontrollierten Umgebung.<\/td><td>Bevorzugt f\u00fcr das Hosting gro\u00dfer Webanwendungen und komplexer Websites.<\/td><td>Ideal f\u00fcr Websites mit hohem Datenverkehr, Lastausgleich und als Reverse Proxy.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Python Webserver gl\u00e4nzen in Entwicklungs- und Testumgebungen durch ihre Einfachheit und Benutzerfreundlichkeit. F\u00fcr Produktionsumgebungen, die mit hohem Datenverkehr zu tun haben und eine robuste Leistung erfordern, sind jedoch traditionelle Server wie Apache und NGINX besser geeignet. Die Wahl zwischen diesen Servern sollte sich nach dem Umfang des Projekts, den Leistungsanforderungen und den ben\u00f6tigten spezifischen Serverfunktionen richten.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-voraussetzungen-fur-den-start-eines-lokalen-python-webservers\">Voraussetzungen f\u00fcr den Start eines lokalen Python-Webservers<\/h2>\n\n\n\n<p>Um mit der Einrichtung eines lokalen Python-Webservers zu beginnen, musst du sicherstellen, dass du die folgenden Voraussetzungen erf\u00fcllst:<\/p>\n\n\n\n<p><strong>Python Installation<\/strong>: Stelle sicher, dass du Python 3.x auf deinem Rechner installiert hast, damit du Zugang zu den neuesten Funktionen und zur Unterst\u00fctzung hast. Bei Debian-basierten Distributionen kannst du Python installieren, indem du die folgenden Commands in deinem Terminal ausf\u00fchrst:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install python3<\/code><\/pre>\n\n\n\n<p><strong>Texteditor<\/strong>: Ein zuverl\u00e4ssiger Texteditor oder eine integrierte Entwicklungsumgebung (IDE) ist wichtig f\u00fcr die Programmierung. Du kannst <a href=\"https:\/\/code.visualstudio.com\/\" rel=\"nofollow\">Visual Studio Code<\/a>, <a href=\"https:\/\/www.jetbrains.com\/pycharm\/\" rel=\"nofollow\">PyCharm <\/a>oder <a href=\"https:\/\/www.sublimetext.com\/\" rel=\"nofollow\">Sublime Text<\/a> f\u00fcr das Schreiben und Bearbeiten deiner Python-Skripte verwenden.<\/p>\n\n\n\n<p><strong>Grundlegende Python-Kenntnisse<\/strong>: Ein grundlegendes Verst\u00e4ndnis der Python-Syntax und der wichtigsten Programmierkonzepte ist erforderlich. Die F\u00e4higkeit, Python-Skripte zu schreiben und auszuf\u00fchren, ist der Schl\u00fcssel zum erfolgreichen Einrichten deines Webservers.<\/p>\n\n\n\n<p><strong>Verwendung der Kommandozeile<\/strong>: Die Vertrautheit mit der Kommandozeile oder dem Terminal ist wichtig, um Befehle auszuf\u00fchren, durch Verzeichnisse zu navigieren und Dateien zu verwalten. Wenn du die Linux-Kommandozeile noch nicht kennst, ist unser Artikel &#8222;<a href=\"https:\/\/contabo.com\/blog\/de\/linux-kommandozeile-tipps-und-tricks\/\">Linux Kommandozeile &#8211; Tipps und Tricks<\/a>&#8220; ein guter Einstieg, um die Grundlagen zu lernen.<\/p>\n\n\n\n<p><strong>Grundlagen der Webentwicklung<\/strong>: Auch wenn es nicht unbedingt notwendig ist, ist es von Vorteil, wenn du die Grundlagen der Webentwicklung kennst, z. B. wie HTTP-Anfragen und -Antworten funktionieren.<\/p>\n\n\n\n<p>Mit diesen Werkzeugen und Kenntnissen bist du bereit, mit der Einrichtung deines lokalen Python-Webservers fortzufahren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-python-frameworks-fur-die-webentwicklung\">Python Frameworks f\u00fcr die Webentwicklung<\/h2>\n\n\n\n<p>Python bietet mehrere Frameworks, die die Webentwicklung vereinfachen und es dir erm\u00f6glichen, robuste Webanwendungen effizient zu erstellen. Flask und Django sind zwei der beliebtesten Frameworks unter Entwicklern.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/flask.palletsprojects.com\/en\/3.0.x\/\" rel=\"nofollow\">Flask <\/a><\/strong>ist ein leichtgewichtiges Framework, das die Grundvoraussetzungen f\u00fcr die schnelle Entwicklung von Webanwendungen bietet. Es ist so konzipiert, dass es einfach und erweiterbar ist, was es ideal f\u00fcr kleine bis mittlere Projekte macht. Mit Flask kannst du mit einfachen Anwendungen mit nur einer Datei beginnen und zu komplexen Anwendungen aufsteigen.<\/p>\n\n\n\n<p><strong><a href=\"https:\/\/www.djangoproject.com\/\" rel=\"nofollow\">Django <\/a><\/strong>ist ein High-Level-Framework, das eine schnelle Entwicklung und ein sauberes, pragmatisches Design f\u00f6rdert. Es enth\u00e4lt ein ORM (Object-Relational Mapping), das Datenbankoperationen abstrahiert, und verf\u00fcgt \u00fcber ein integriertes Admin-Panel. Django eignet sich mit seinem &#8222;batteries-included&#8220;-Ansatz f\u00fcr gr\u00f6\u00dfere Anwendungen.<\/p>\n\n\n\n<p>Andere bemerkenswerte Frameworks sind <strong><a href=\"https:\/\/trypyramid.com\/\" rel=\"nofollow\">Pyramid<\/a><\/strong>, das in Bezug auf die Funktionen zwischen Flask und Django liegt, und <strong><a href=\"https:\/\/www.tornadoweb.org\/en\/stable\/\" rel=\"nofollow\">Tornado<\/a><\/strong>, das f\u00fcr seine asynchronen F\u00e4higkeiten und seine F\u00e4higkeit, langlebige Netzwerkverbindungen zu verwalten, bekannt ist.<\/p>\n\n\n\n<p>Die Wahl des richtigen Frameworks h\u00e4ngt von den Anforderungen deines Projekts, deiner Vertrautheit mit dem Framework und den spezifischen Funktionen ab, die du brauchst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-einrichten-eines-lokalen-python-webservers\">Einrichten eines lokalen Python Webservers<\/h2>\n\n\n\n<p>Die Einrichtung eines lokalen Python Webservers erfordert ein paar einfache Schritte, von der Installation von Python \u00fcber die Einrichtung deines Projektverzeichnisses bis hin zur Auswahl eines Web-Frameworks wie Flask. Hier erf\u00e4hrst du, wie du auf verschiedenen Betriebssystemen loslegen kannst:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-installation-von-python\">Installation von Python<\/h3>\n\n\n\n<p><strong>Windows-, macOS- und Linux-Nutzer<\/strong> k\u00f6nnen Python von der offiziellen Python-Website herunterladen. Linux-Benutzer, insbesondere diejenigen mit Debian-basierten Distributionen, k\u00f6nnen Python \u00fcber das Terminal mit den oben genannten Befehlen installieren. Vergewissere dich, dass du Python 3.x installiert hast, indem du python3 &#8211;version in deinem Terminal oder in der Eingabeaufforderung eingibst, um deine Python-Version zu \u00fcberpr\u00fcfen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-installation-von-python-0\">Installation von Python<\/h3>\n\n\n\n<p>Flask kann mit pip, dem Paketinstallationsprogramm von Python, installiert werden. \u00d6ffne dein Terminal oder die Eingabeaufforderung und f\u00fchre den folgenden Befehl aus, um Flask zu installieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>pip install Flask<\/code><\/pre>\n\n\n\n<p>Dieser Befehl funktioniert sowohl auf Windows, als auch auf macOS und Linux, solange du Python und pip installiert hast.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-projektverzeichnis-einrichten\">Projektverzeichnis einrichten<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Erstelle ein Projektverzeichnis<\/strong>: W\u00e4hle einen Ort auf deinem Computer, an dem du deine Projektdateien speichern m\u00f6chtest. Erstelle ein neues Verzeichnis, indem du mkdir my_project in deinem Terminal oder in der Eingabeaufforderung ausf\u00fchrst und dann mit cd my_project dorthin navigierst.<\/li>\n\n\n\n<li><strong>Initialisiere eine virtuelle Umgebung<\/strong> (optional, aber empfohlen): Mit einer virtuellen Umgebung kannst du die Abh\u00e4ngigkeiten deines Projekts separat verwalten. Erstelle eine, indem du python3 -m venv venv ausf\u00fchrst. Aktiviere sie mit source venv\/bin\/activate unter macOS\/Linux oder .\\venv\\Scripts\\activate unter Windows.<\/li>\n\n\n\n<li><strong>Installiere ein Web-Framework<\/strong>: Wenn deine virtuelle Umgebung aktiviert ist, installiere Flask (oder das Framework deiner Wahl) mit pip, falls du das noch nicht getan hast.<\/li>\n\n\n\n<li><strong>Erstelle deine erste App<\/strong>: Erstelle in deinem Projektverzeichnis eine Datei namens app.py. \u00d6ffne diese Datei in deinem Texteditor oder deiner IDE und schreibe eine einfache Flask-Anwendung:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask&nbsp;\napp = Flask(__name__)&nbsp;\n&nbsp;\n@app.route('\/')&nbsp;\ndef hello_world():&nbsp;\n&nbsp;&nbsp;&nbsp; return 'Hello, World!'&nbsp;\n&nbsp;\nif __name__ == '__main__':&nbsp;\n&nbsp;&nbsp;&nbsp; app.run(debug=True)&nbsp;<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Starte deinen Server<\/strong>: Wenn du deine Flask-App geschrieben hast, gehe zur\u00fcck zu deinem Terminal oder deiner Eingabeaufforderung, stelle sicher, dass du dich in deinem Projektverzeichnis befindest, und f\u00fchre python app.py aus. Dadurch wird dein lokaler Webserver gestartet.<\/li>\n\n\n\n<li><strong>Greife auf deinen Server zu<\/strong>: \u00d6ffne deinen Webbrowser und navigiere zu <a href=\"http:\/\/localhost:5000\" rel=\"nofollow\">http:\/\/localhost:5000<\/a>. Du solltest &#8222;Hello, World!&#8220; sehen, was bedeutet, dass dein lokaler Python-Webserver erfolgreich l\u00e4uft.<\/li>\n<\/ul>\n\n\n\n<p>Wenn du diese Schritte befolgst, hast du erfolgreich einen lokalen Python-Webserver mit Flask eingerichtet und bist bereit f\u00fcr die Entwicklung und das Testen von Webanwendungen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-entwicklung-deiner-ersten-webanwendung\">Entwicklung deiner ersten Webanwendung<\/h2>\n\n\n\n<p>Wenn du deine erste Webanwendung mit Python erstellst, musst du sowohl statische als auch dynamische Inhalte verarbeiten. Zu den statischen Inhalten geh\u00f6ren Dateien wie Bilder, CSS und JavaScript, die sich nicht \u00e4ndern, w\u00e4hrend dynamische Inhalte vom Server auf der Grundlage von Benutzer-Requests on-the-fly generiert werden. Hier ist ein einfacher Guide, der dir den Einstieg erleichtert:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-handhabung-statischer-inhalte\">Handhabung statischer Inhalte<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Organisiere die statischen Dateien<\/strong>: Erstelle einen Ordner namens static in deinem Projektverzeichnis. Lege deine statischen Dateien, wie Bilder, CSS- und JavaScript-Dateien, in diesem Ordner ab.<\/li>\n\n\n\n<li><strong>Statische Dateien anbieten<\/strong>: Flask stellt automatisch statische Dateien aus dem Ordner static bereit. Du kannst diese Dateien in deinem HTML-Code mit der URL \/static\/filename aufrufen. Wenn du zum Beispiel ein Bild mit dem Namen logo.png im statischen Ordner hast, kannst du es mit <img decoding=\"async\" src=\"\/static\/logo.png\"> in dein HTML einbinden.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-handhabung-dynamischer-inhalte\">Handhabung dynamischer Inhalte<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Templates erstellen<\/strong>: Dynamische Inhalte werden normalerweise \u00fcber Templates bereitgestellt. Erstelle einen Ordner namens templates in deinem Projektverzeichnis. In diesem Ordner erstellst du eine HTML-Datei, z. B. index.html, die als Template dient.<\/li>\n\n\n\n<li><strong>Templates rendern<\/strong>: Verwende die Funktion render_template von Flask, um deine HTML-Datei auszuliefern. \u00c4ndere deine app.py und f\u00fcge sie ein:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask, render_template&nbsp;\n&nbsp;\napp = Flask(__name__)&nbsp;\n&nbsp;\n@app.route('\/')&nbsp;\ndef home():&nbsp;\n&nbsp;&nbsp;&nbsp; return render_template('index.html')&nbsp;<\/code><\/pre>\n\n\n\n<p>Dieser Code weist Flask an, die Template index.html zu rendern, wenn die Stamm-URL aufgerufen wird.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ausfuhrung-und-zugriff-auf-den-webserver\">Ausf\u00fchrung und Zugriff auf den Webserver<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Starte den Server<\/strong>: Starte deine Flask-Anwendung, indem du python app.py in deinem Terminal ausf\u00fchrst. Dadurch wird der Webserver gestartet.<\/li>\n\n\n\n<li><strong>Greife auf die Anwendung zu<\/strong>: \u00d6ffne einen Browser und gehe zu http:\/\/localhost:5000. Du wirst sehen, dass deine Webanwendung l\u00e4uft. Auf der Root-Route (\/) wird die Template index.html angezeigt, die zeigt, wie Flask sowohl statische als auch dynamische Inhalte verarbeitet.<\/li>\n<\/ul>\n\n\n\n<p>Wenn du diese Schritte befolgst, hast du eine grundlegende Webanwendung erstellt, die sowohl statische als auch dynamische Inhalte bereitstellt. Experimentiere mit verschiedenen Routen, Templates und statischen Files, um die M\u00f6glichkeiten von Flask weiter zu erkunden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-integration-von-datenbanken\">Integration von Datenbanken<\/h2>\n\n\n\n<p>Die Integration einer Datenbank in deinen Python-Webserver erm\u00f6glicht die dynamische Verwaltung und Speicherung von Inhalten, die f\u00fcr die meisten Webanwendungen unerl\u00e4sslich sind. Python unterst\u00fctzt verschiedene Arten von Datenbanken, von leichtgewichtigen Optionen wie SQLite bis hin zu robusteren Systemen wie PostgreSQL und MySQL. Hier findest du einen kurzen \u00dcberblick \u00fcber die Anbindung an Datenbanken und einige Empfehlungen:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-verbindung-zu-datenbanken\">Verbindung zu Datenbanken<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>W\u00e4hle eine Datenbank<\/strong>: W\u00e4hle eine Datenbank, die zu den Anforderungen deines Projekts passt. SQLite ist aufgrund seiner Einfachheit und leichten Einrichtung ideal f\u00fcr die Entwicklung und kleine Anwendungen. F\u00fcr Produktionsumgebungen oder Anwendungen, die mehr Skalierbarkeit erfordern, solltest du PostgreSQL oder MySQL in Betracht ziehen.<\/li>\n\n\n\n<li><strong>Verwende ein ORM<\/strong>: Ein objektrelationales Mapping-Tool (ORM) wie <a href=\"https:\/\/www.sqlalchemy.org\/\" rel=\"nofollow\">SQLAlchemy <\/a>oder das in Django integrierte ORM vereinfacht Datenbankoperationen. ORMs erm\u00f6glichen es dir, mit deiner Datenbank \u00fcber Python-Code statt \u00fcber SQL-Abfragen zu interagieren, wodurch dein Code besser wartbar und portabel wird.<\/li>\n\n\n\n<li><strong>Stelle eine Verbindung her<\/strong>: Installiere den erforderlichen Datenbanktreiber f\u00fcr die von dir gew\u00e4hlte Datenbank (z. B. psycopg2 f\u00fcr PostgreSQL). Konfiguriere dann deine Webanwendung so, dass sie sich mit der Datenbank verbindet, indem du die Verbindungseinstellungen des ORM verwendest. Zum Beispiel in Flask mit SQLAlchemy:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask_sqlalchemy import SQLAlchemy\napp.config&#91;'SQLALCHEMY_DATABASE_URI'] = \n'postgresql:\/\/username:password@localhost\/mydatabase'\ndb = SQLAlchemy(app)&nbsp;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-empfohlene-typen-fur-python-webserver\">Empfohlene Typen f\u00fcr Python Webserver<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SQLite<\/strong>: Am besten f\u00fcr die Entwicklung und das Testen geeignet, da es unkompliziert ist und keine Konfiguration erfordert.<\/li>\n\n\n\n<li><strong>PostgreSQL<\/strong>: <a href=\"https:\/\/contabo.com\/blog\/open-source-database-series-postgresql\/\">PostgreSQL <\/a>wird besonders f\u00fcr Produktionsumgebungen empfohlen, die robuste Funktionen, Datenintegrit\u00e4t und Skalierbarkeit erfordern.<\/li>\n\n\n\n<li><strong>MySQL<\/strong>: <a href=\"https:\/\/contabo.com\/blog\/open-source-databases-series-mysql\/\">MySQL <\/a>ist eine weitere beliebte Wahl f\u00fcr Webanwendungen, die f\u00fcr ihre Zuverl\u00e4ssigkeit und Leistung bekannt ist.<\/li>\n<\/ul>\n\n\n\n<p>Die Wahl der richtigen Datenbank h\u00e4ngt von der Gr\u00f6\u00dfe, der Komplexit\u00e4t und den spezifischen Anforderungen deiner Anwendung ab. Mit den richtigen Werkzeugen und Libraries ist es ganz einfach, eine Datenbank in deinen Python-Webserver zu integrieren und dynamische, datengesteuerte Webanwendungen zu erstellen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sicherheitserwagungen\">Sicherheitserw\u00e4gungen<\/h2>\n\n\n\n<p>Die Sicherheit deines lokalen Python-Webservers zu gew\u00e4hrleisten ist wichtig, auch w\u00e4hrend der Entwicklung. Hier sind einige grundlegende Sicherheitsma\u00dfnahmen, die du umsetzen solltest:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Regelm\u00e4\u00dfige Updates<\/strong>: Halte Python, dein Web-Framework und alle Abh\u00e4ngigkeiten auf dem neuesten Stand, um dich vor bekannten Sicherheitsl\u00fccken zu sch\u00fctzen.<\/li>\n\n\n\n<li><strong>Verwende HTTPS<\/strong>: Selbst f\u00fcr lokale Tests solltest du HTTPS verwenden, um die Daten w\u00e4hrend der \u00dcbertragung zu verschl\u00fcsseln. Tools wie Let Us Encrypt bieten kostenlose SSL\/TLS-Zertifikate an, oder du kannst f\u00fcr Entwicklungszwecke selbst signierte Zertifikate verwenden.<\/li>\n\n\n\n<li><strong>Eingaben validieren<\/strong>: \u00dcberpr\u00fcfe immer die Benutzereingaben, um h\u00e4ufige Webschwachstellen wie SQL-Injection und Cross-Site-Scripting (XSS) zu verhindern. Verwende integrierte Framework-Funktionen oder Bibliotheken, die f\u00fcr die Validierung von Eingaben entwickelt wurden.<\/li>\n\n\n\n<li><strong>Zugriff beschr\u00e4nken<\/strong>: Wenn dein lokaler Server \u00fcber ein Netzwerk erreichbar ist, schr\u00e4nke den Zugriff mit <a href=\"https:\/\/contabo.com\/blog\/de\/software-firewall-unter-windows-und-linux\/\">Firewall<\/a>-Regeln oder durch Binden des Servers an localhost (127.0.0.1) ein, um unbefugten externen Zugriff zu verhindern.<\/li>\n\n\n\n<li><strong>Verwende Environment-Variablen<\/strong>: Speichere sensible Informationen wie Datenbankzugangsdaten in Environment-Variablen, anstatt sie fest in deiner Anwendung zu kodieren.<\/li>\n<\/ul>\n\n\n\n<p>Wenn du diese grundlegenden Sicherheitspraktiken befolgst, kannst du das Risiko von Schwachstellen in deiner lokalen Webserver-Einrichtung erheblich reduzieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-praktisches-beispielprojekt\">Praktisches Beispielprojekt<\/h2>\n\n\n\n<p>Wir wollen eine einfache, aber funktionale Python-Webanwendung mit Flask erstellen, die eine Begr\u00fc\u00dfung und die aktuelle Uhrzeit anzeigt. Dieses Projekt demonstriert den Umgang mit dynamischen Inhalten und vermittelt dir praktische Erfahrungen mit Flask.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-schritt-1-richte-dein-environment-ein\">Schritt 1: Richte dein Environment ein<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Stelle sicher, dass Python und Flask installiert sind.<\/li>\n\n\n\n<li>Erstelle ein neues Verzeichnis f\u00fcr dein Projekt, z.B. flask_time_app.<\/li>\n\n\n\n<li>Navigiere in dein Projektverzeichnis und aktiviere eine virtuelle Umgebung.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-schritt-2-erstelle-deine-flask-anwendung\">Schritt 2: Erstelle deine Flask-Anwendung<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Initialisiere deine App<\/strong>: Erstelle in deinem Projektverzeichnis eine Datei namens app.py. Klicke auf &#8222;Open&#8220; in deinem Texteditor und f\u00fcge den folgenden Code ein:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>from flask import Flask \nfrom datetime import datetime \n \napp = Flask(__name__) \n \n@app.route('\/') \ndef home(): \n    current_time = datetime.now().strftime('%H:%M:%S') \n    return f'Hello, the current time is {current_time}' \n \nif __name__ == '__main__': \n    app.run(debug=True)<\/code><\/pre>\n\n\n\n<p>Dieser Code initialisiert eine Flask-Anwendung und definiert eine einzelne Route (\/), die beim Zugriff eine Begr\u00fc\u00dfung und die aktuelle Uhrzeit anzeigt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-schritt-3-fuhre-deine-anwendung-aus\">Schritt 3: F\u00fchre deine Anwendung aus<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>F\u00fchre in deinem Terminal den Befehl python app.py aus, um deinen Flask-Server zu starten.<\/li>\n\n\n\n<li>\u00d6ffne einen Webbrowser und navigiere zu <a href=\"http:\/\/localhost:5000\" rel=\"nofollow\">http:\/\/localhost:5000<\/a>. Du solltest eine Meldung sehen, die anzeigt: &#8222;Hello, the current time is [aktuelle Zeit].&#8220;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-schritt-4-weiter-erkunden\">Schritt 4: Weiter erkunden<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Versuche, weitere Routen hinzuzuf\u00fcgen, um verschiedene Nachrichten oder Inhalte anzuzeigen.<\/li>\n\n\n\n<li>Experimentiere mit Flask-Templates, um HTML-Seiten anstelle von einfachem Text darzustellen.<\/li>\n<\/ul>\n\n\n\n<p>Dieses einfache Projekt f\u00fchrt dich in die Entwicklung von Webanwendungen mit Flask, den Umgang mit dynamischen Inhalten und in die Grundlagen des Webserverbetriebs ein. Wenn du dich mit dem Projekt vertraut gemacht hast, kannst du es um komplexere Funktionen erweitern, z. B. um die Integration von Datenbanken oder die Verarbeitung von Benutzereingaben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-haufige-herausforderungen-und-fehlerbehebung\">H\u00e4ufige Herausforderungen und Fehlerbehebung<\/h2>\n\n\n\n<p>Einsteiger sto\u00dfen bei der Einrichtung eines Python-Webservers oft auf ein paar typische Probleme:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Server startet nicht<\/strong>: Stelle sicher, dass Python und Flask richtig installiert sind. Pr\u00fcfe auf Syntaxfehler in deiner app.py-Datei.<\/li>\n\n\n\n<li><strong>Port wird bereits verwendet<\/strong>: Wenn du eine Fehlermeldung erh\u00e4ltst, dass der Port bereits verwendet wird, \u00e4ndere den Port, indem du den Befehl app.run(debug=True, port=5001) in deiner app.py \u00e4nderst.<\/li>\n\n\n\n<li><strong>Statische Dateien werden nicht geladen<\/strong>: \u00dcberpr\u00fcfe, ob sich die statischen Dateien im richtigen statischen Verzeichnis befinden und in deinen HTML- oder Flask-Routen korrekt referenziert werden.<\/li>\n\n\n\n<li><strong>Template nicht gefunden<\/strong>: Vergewissere dich, dass deine HTML-Templates im templates-Ordner gespeichert sind und dass du den richtigen Dateinamen in deiner render_template-Funktion verwendest.<\/li>\n<\/ul>\n\n\n\n<p>Bei den meisten Problemen k\u00f6nnen die Fehlermeldungen und die Flask-Dokumentation schnelle L\u00f6sungen bieten. Vergewissere dich au\u00dferdem, dass deine Entwicklungsumgebung richtig eingerichtet ist und dass du die Flask-Konventionen f\u00fcr Datei- und Verzeichnisstrukturen einh\u00e4ltst.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-alternativen-erkunden\">Alternativen erkunden<\/h2>\n\n\n\n<p>Neben Python und Flask bieten verschiedene andere Technologien robuste L\u00f6sungen f\u00fcr die lokale Webentwicklung:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-node-js-mit-express\">Node.js mit Express<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vorteile<\/strong>: JavaScript sowohl auf der Client- als auch auf der Serverseite, was es zu einer nahtlosen Wahl f\u00fcr Entwickler macht, die mit JavaScript vertraut sind. Express.js bietet ein minimalistisches Framework f\u00fcr die schnelle Entwicklung von Webanwendungen.<\/li>\n\n\n\n<li><strong>Nachteile<\/strong>: Callbacks und asynchroner Code k\u00f6nnen f\u00fcr Einsteiger eine Herausforderung sein. Die Verwaltung umfangreicher Anwendungen erfordert m\u00f6glicherweise zus\u00e4tzliche Tools und Frameworks.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-php\">PHP<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vorteile<\/strong>: Weit verbreitet in der Webentwicklung, mit umfangreicher Dokumentation und einer gro\u00dfen Community. Einfacher Einstieg f\u00fcr kleine Projekte und eingebettet in HTML.<\/li>\n\n\n\n<li><strong>Nachteile<\/strong>: Kann f\u00fcr moderne Webanwendungen ohne ein Framework unhandlich werden. Die Programmiersprache ist inkonsistent und hat einen schlechten Ruf f\u00fcr Design Patterns.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-docker-nginx\">Docker + NGINX<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Vorteile<\/strong>: Docker-Container kapseln die Umgebung und machen Projekte \u00fcber verschiedene Rechner hinweg portabel und konsistent. NGINX ist hocheffizient f\u00fcr statische Inhalte und Lastausgleich.<\/li>\n\n\n\n<li><strong>Nachteile<\/strong>: Docker hat eine Lernkurve und erfordert ein Verst\u00e4ndnis der Prinzipien der Containerisierung.Die Konfiguration von NGINX kann f\u00fcr Einsteiger komplex sein.<\/li>\n<\/ul>\n\n\n\n<p>Verglichen mit Python f\u00fcr die lokale Entwicklung, bieten diese Alternativen unterschiedliche Paradigmen und \u00d6kosysteme. Python bleibt ein starker Konkurrent wegen seiner Lesbarkeit, Einfachheit und der gro\u00dfen Auswahl an Bibliotheken und Frameworks, die es sowohl f\u00fcr Einsteiger als auch f\u00fcr erfahrene Entwickler geeignet machen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-fazit\">Fazit<\/h2>\n\n\n\n<p>In diesem Tutorial haben wir uns mit den Grundlagen der Einrichtung eines lokalen Python-Webservers zum Testen besch\u00e4ftigt, von der Installation von Python und Flask bis zur Entwicklung einer einfachen Webanwendung, die sowohl statische als auch dynamische Inhalte verarbeitet. Au\u00dferdem haben wir uns mit der Datenbankintegration und grundlegenden Sicherheitsma\u00dfnahmen besch\u00e4ftigt und uns mit den h\u00e4ufigsten Herausforderungen f\u00fcr Anf\u00e4nger auseinandergesetzt. Au\u00dferdem haben wir uns alternative Technologien wie Node.js mit Express, PHP und Docker + NGINX angesehen und ihre Vor- und Nachteile im Vergleich zu Python herausgestellt. Mit diesem Wissen bist du nun in der Lage, deine Webanwendungen lokal zu entwickeln und zu testen und die Einfachheit und Flexibilit\u00e4t von Python f\u00fcr deine Projekte zu nutzen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Schritt-f\u00fcr-Schritt Anleitung zeigt, wie man einen lokalenPython-Webserver z.B. f\u00fcr Testzwecke aufsetzt: inkl. Code,Kommandos <\/p>\n","protected":false},"author":65,"featured_media":19046,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1399],"tags":[],"ppma_author":[1489,1491],"class_list":["post-19088","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials"],"uagb_featured_image_src":{"full":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing.jpg",1200,630,false],"thumbnail":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing-150x150.jpg",150,150,true],"medium":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing-600x315.jpg",600,315,true],"medium_large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing-768x403.jpg",768,403,true],"large":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing.jpg",1200,630,false],"1536x1536":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing.jpg",1200,630,false],"2048x2048":["https:\/\/contabo.com\/blog\/wp-content\/uploads\/2024\/02\/blog-head_how2-host-a-local-python-web-server-for-testing.jpg",1200,630,false]},"uagb_author_info":{"display_name":"Julia Mink","author_link":"https:\/\/contabo.com\/blog\/de\/author\/julia-mink\/"},"uagb_comment_info":0,"uagb_excerpt":"Die Schritt-f\u00fcr-Schritt Anleitung zeigt, wie man einen lokalenPython-Webserver z.B. f\u00fcr Testzwecke aufsetzt: inkl. Code,Kommandos","authors":[{"term_id":1489,"user_id":65,"is_guest":0,"slug":"julia-mink","display_name":"Julia Mink","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/26ce5d4ae17d160425d842da4ea00c56716ffb5d4c58ee0cfb73de57b1de5272?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""},{"term_id":1491,"user_id":50,"is_guest":0,"slug":"tobias","display_name":"Tobias Mildenberger","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/077178d5dce6c3d4c0c0396857a7e544bfdf8adf04145fff5160b33a22e28b1f?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts\/19088","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=19088"}],"version-history":[{"count":4,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts\/19088\/revisions"}],"predecessor-version":[{"id":19113,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/posts\/19088\/revisions\/19113"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/media\/19046"}],"wp:attachment":[{"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=19088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=19088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=19088"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/contabo.com\/blog\/de\/wp-json\/wp\/v2\/ppma_author?post=19088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}