Diese Seite beschreibt grob, wie die Python-Webentwicklung ohne Web-Frameworks aussieht. Diese Möglichkeit steht immer noch offen, wenn auch viele Benutzer längst dazu übergegengen sind, Frameworks zu verwenden. Jedoch werden auch heute noch diese einzelnen Protokolle "im Unterbau" verwendet. So kann man viele Frameworks über CGI & Co. betreiben, beispielsweise ist es problemlos möglich, Django sowohl über mod_python als auch über FastCGI/SCGI zu verwenden.
CGI
Beim CGI (Common Gateway Interface) liegt ein Programm irgendwo im Dokumentenbaum (z.B. /cgi-bin/) und wird vom Webserver jedes mal neu gestartet, wenn eine Anfrage kommt. Das Programm erhält vom Webserver Ungebungsvariablen, die spezifizieren, wie auf das CGI-Programm zugegriffen wurde.
Siehe auch: Web-Skripte zum laufen bringen - Allgemeine Anleitung für CGI/Web-Programmierung
FastCGI
Ein Programm wird vom FastCGI-Modul einmal geladen, und wartet dann in einer Art Busy-Loop. Sobald der Server eine Anfrage bekommt wird diese Anfrage serialisiert, per stdin an den Prozess (der ja bereits läuft) geschickt, von einer Middelware (z.B. jon-py) deserialisiert, und dann an das eigentliche dynamische Skript weitergegeben. Die Übergabe an das eigentliche Skript (vielleicht sollte man eher Handler sagen) findet mittels WSGI statt (bei jon-py). Vorteil: Der Python-Interpreter wird nur einmal geladen. Zu erwähnen ist auch, dass es für den Apache-Webserver zwei FastCGI-Module gibt: mod_fastcgi sowie das verbesserte und aktuellere mod_fastcgid. Lighttpd hingegen bringt im Lieferumfang schon Unterstützung für FastCGI mit.
Siehe auch: http://de.wikipedia.org/wiki/FastCGI
SCGI
Ein Server wird auf irgendeinem Port gestartet und nimmt vom Webserver Befehle entgegen. Das Ergebnis des Befehls wird dann wieder an den Webserver weitergeleitet. Im Großen und Ganzen ist SCGI einfach nur ein vereinfachtes FastCGI.
Siehe auch: http://python.ca/nas/scgi/
mod_python
Um es vorab schon einmal klar zu stellen: mod_python ist absolut nicht zu vergleichen mit mod_php. Es verfolgt einen gänzlich anderen Ansatz. Wen man etwas mit mod_php vergleichbares sucht, sollte man sich die Frameworks Spyce und Karrigell ansehen.
Bei mod_python wird ein Python-Interpreter geladen, das entsprechende Modul wird importiert, und sobald eine Anfrage auf die entsprechende URL kommt, wo das Modul liegt, ruft mod_python eine Funktion des Moduls auf, nämlich den Handler. Die Daten bekommt das Modul über ein apache-Objekt, welches den Zustand des aktuellen mod_python-Threads enthält. Vorteil: Der Python-Interpreter wird nur einmal geladen was Zeit spart. Nachteil ist natürlich, dass mod_python nur für den Apache-Webserver verfügbar ist.
Siehe auch: http://de.wikipedia.org/wiki/Mod_python