Aus der offiziellen Dokumentation :
Werkzeug ist eine WSGI-Dienstprogrammbibliothek für Python.
Wenn ich jedoch meine Flask-Webanwendung ausführe, stelle ich fest, dass der Antwortheader vom Server Folgendes enthält:
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 13
Server: Werkzeug/0.11.9 Python/2.7.10
Date: Tue, 03 May 2016 12:50:08 GMT
In der vierten Zeile erwähnt der Server a Werkzeug
, aber wie genau ist es Werkzeug
, wie ein Webserver Apache
?
Server:
Zeile anzeigen würde .werkzeug
wird mit einem kleinen Entwicklungswebserver ausgeliefert - was wahrscheinlich die obige Antwort hervorgebracht hat. Wir werden nur sicher wissen, ob das OP sein Setup etwas detaillierter erklärt ...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
(oderwerkzeug.serving.run_simple()
), erhalten Sie diesen Entwicklungsserver. Und derServer:
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.
quelle
Nein, ist es nicht
Hier ist der vollständige Anwendungsfall von Werkzeug WSGI:
Ich hoffe es hilft
quelle
Weil es nicht so ist.
In Ihrem Setup verwenden Sie höchstwahrscheinlich den "Entwicklungsserver" (die
run_simple
Funktion) zum Testen. In diesem Anwendungsfall ist es also wie bei einem (sehr) armen MannApache
, aber nur in gewissem Sinne, dass es in der Lage ist, HTTP-Anfragen korrekt zu beantworten.Wenn Sie die Dokumente http://werkzeug.pocoo.org/docs/serving/ überprüfen , wird der folgende Hinweis angezeigt:
quelle
Flask Python verwendet Werkzeurg als Webserver zum Testen
quelle