Wie sind WSGI, CGI und die Frameworks miteinander verbunden?
Apache überwacht Port 80. Es wird eine HTTP-Anfrage gesendet. Es analysiert die Anfrage, um einen Weg zu finden, um zu antworten. Apache hat eine Menge Auswahlmöglichkeiten. Eine Möglichkeit zu antworten besteht darin, CGI zum Ausführen eines Skripts zu verwenden. Eine andere Möglichkeit zu antworten besteht darin, einfach eine Datei bereitzustellen.
Im Fall von CGI bereitet Apache eine Umgebung vor und ruft das Skript über das CGI-Protokoll auf. Dies ist eine Standard-Unix Fork / Exec-Situation. Der CGI-Unterprozess erbt eine Betriebssystemumgebung, einschließlich Socket und Standardausgabe. Der CGI-Unterprozess schreibt eine Antwort, die auf Apache zurückgeht. Apache sendet diese Antwort an den Browser.
CGI ist primitiv und nervig. Meistens, weil für jede Anforderung ein Unterprozess gegabelt wird und der Unterprozess stdout und stderr beenden oder schließen muss, um das Ende der Antwort anzuzeigen.
WSGI ist eine Schnittstelle, die auf dem CGI-Entwurfsmuster basiert. Es ist nicht unbedingt CGI - es muss nicht für jede Anforderung ein Unterprozess gegabelt werden. Es kann CGI sein, muss es aber nicht sein.
WSGI ergänzt das CGI-Entwurfsmuster auf mehrere wichtige Arten. Es analysiert die HTTP-Anforderungsheader für Sie und fügt diese der Umgebung hinzu. Es liefert jede POST-orientierte Eingabe als dateiähnliches Objekt in der Umgebung. Es bietet Ihnen auch eine Funktion, die die Antwort formuliert und Sie vor vielen Formatierungsdetails bewahrt.
Was muss ich wissen / installieren / tun, wenn ich ein Webframework (z. B. web.py oder cherrypy) für meine grundlegende CGI-Konfiguration ausführen möchte?
Denken Sie daran, dass das Gabeln eines Teilprozesses teuer ist. Es gibt zwei Möglichkeiten, dies zu umgehen.
Eingebettet mod_wsgi
oder mod_python
bettet Python innerhalb Apache; Es ist kein Prozess gegabelt. Apache führt die Django-Anwendung direkt aus.
Daemon mod_wsgi
oder mod_fastcgi
ermöglicht Apache die Interaktion mit einem separaten Daemon (oder "lang laufenden Prozess") unter Verwendung des WSGI-Protokolls. Sie starten Ihren lang laufenden Django-Prozess und konfigurieren dann mod_fastcgi von Apache für die Kommunikation mit diesem Prozess.
Beachten Sie, dass mod_wsgi
dies in beiden Modi funktionieren kann: Embedded oder Daemon.
Wenn Sie sich über mod_fastcgi informieren, werden Sie feststellen, dass Django aus flup eine WSGI-kompatible Schnittstelle aus den von mod_fastcgi bereitgestellten Informationen erstellt. Die Pipeline funktioniert so.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django hat mehrere "django.core.handlers" für die verschiedenen Schnittstellen.
Für mod_fastcgi bietet Django eine manage.py runfcgi
, die FLUP und den Handler integriert.
Für mod_wsgi gibt es dafür einen Core-Handler.
Wie installiere ich die WSGI-Unterstützung?
Befolgen Sie diese Anweisungen.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Hintergrundinformationen finden Sie hier
http://docs.djangoproject.com/de/dev/howto/deployment/#howto-deployment-index