Werkzeug ist in erster Linie eine Bibliothek, kein Webserver, obwohl es einen einfachen Webserver für Entwicklungszwecke bietet. Dieser Entwicklungsserver stellt diesen Server:
Header bereit.
Um näher darauf einzugehen:
Lassen Sie uns zunächst über WSGI sprechen. Es gibt eine Reihe von Webservern wie Apache, Nginx, Lighttpd usw. Es gibt auch eine Reihe von in Python geschriebenen Webframeworks, z. B. Django, Flask, Tornado, Pyramid usw. Es wäre schrecklich praktisch, wenn dies der Fall wäre alles interoperabel. Hier kommt WSGI ins Spiel. Die Idee ist folgende:
Bei der Beantwortung der HTTP-Anfrage eines Clients sind zwei Seiten beteiligt: der Webserver und die Webanwendung . Der Server kümmert sich um die Feinheiten der Netzwerkverbindungen, empfängt die Anforderung und sendet die Antwort. Die Anwendung nimmt die Anforderungsdaten entgegen, verarbeitet sie und erstellt die Antwort, die der Server zurücksenden soll.
Wenn Sie eine Python-Webanwendung schreiben möchten, stellen Sie sicher, dass sie über ein aufrufbares Objekt (z. B. eine Funktion) verfügt, das bestimmte Parameter für HTTP-Header, Eingabeformulardaten, Umgebungsvariablen usw. akzeptiert.
Wenn Sie einen Webserver schreiben möchten, der Python-Apps bereitstellt, rufen Sie dieses aufrufbare Objekt jedes Mal aus der Anwendung auf, wenn eine HTTP-Anforderung eingeht.
Die WSGI-Spezifikation (in PEP 3333 ) gibt genau an, welche Parameter für diesen aufrufbaren Wert erforderlich sind und wie hoch der Rückgabewert sein soll, damit jeder Server weiß, wie er mit jeder Anwendung kommunizieren kann und umgekehrt.
Wir wissen also, dass jede Webanwendung diese aufrufbare Funktion bereitstellen und in der Lage sein muss, die spezifischen Parameter zu verarbeiten, die sie empfängt. Jede Anwendung muss dies tun ... Das klingt nach einer guten Gelegenheit, eine Bibliothek zu verwenden. Werkzeug ist diese Bibliothek.
Werkzeug bietet eine Reihe von Dienstprogrammen für die Entwicklung von WSGI-kompatiblen Anwendungen. Diese Dienstprogramme analysieren beispielsweise Header, senden und empfangen Cookies, ermöglichen den Zugriff auf Formulardaten, generieren Weiterleitungen, generieren Fehlerseiten, wenn es eine Ausnahme gibt, und stellen sogar einen interaktiven Debugger bereit, der im Browser ausgeführt wird. Es ist wirklich ziemlich umfassend. Flask baut dann auf dieser Grundlage (und Jinja, Click usw.) auf, um ein vollständiges Webframework bereitzustellen.
Wenn Werkzeug eine Bibliothek für Anwendungen ist , warum wird sie dann im Server-Header angezeigt?
Werkzeug hat auch ein Modul für die Serverrolle. Dies dient lediglich der Bequemlichkeit.
Das Installieren und Konfigurieren eines vollwertigen Webservers wie Apache oder Nginx ist sehr aufwändig und mit ziemlicher Sicherheit übertrieben, nur um Ihre Anwendung auf Ihrer eigenen Entwicklungsbox zu testen. Aus diesem Grund bietet Werkzeug einen Entwicklungsserver: einen einfachen Webserver, den Sie mit einem einzigen Befehl und fast ohne Konfiguration ausführen können. Wenn Sie dies tun flask run
(oder werkzeug.serving.run_simple()
), erhalten Sie diesen Entwicklungsserver. Und der Server:
Header für den Entwicklungsserver lautet - Sie haben es erraten - Werkzeug/<version> Python/<version>
.
Dieser Server ist nicht für die Produktion bestimmt. Zumindest ist es laut Dokumentation nicht gut skalierbar. Aber ich wäre nicht überrascht, wenn es auch andere Bedenken gäbe, wie zum Beispiel die Sicherheit.
Server:
Zeile anzeigen würde .