Benutzer-Werkzeuge

Webseiten-Werkzeuge


python:pythoncgi:cgi

CGI in Python

Was ist CGI?

Das Common Gateway Interface (CGI) ist eine Schnittstelle von Webservern, über die Datenaustausch mit externen Anwendungen möglich ist. Die Webseiten müssen nicht vollständig auf den Server liegen, sie werden von Programmen dynamisch erzeugt. Die Programme liegen dazu in einem Extra-Verzeichnis des Webservers (z.B. cgi-bin). Früher wurde für CGI-Scripte meist Perl oder C verwendet. Python wird auch in CGI-Scripten, meist innerhalb von Webframeworks, wie Django oder Flask verwendet.

CGI und Python

Auch mit Python lassen sich CGI-Scripte erzeugen. Dafür muss eine ausführbare Python-Datei erzeugt werden, die HTML-Quelltext erzeugt. Unter Windows 10 und 11 lässt sich eine Python-Datei einfach durch Doppelklick ausführen, unter anderen Betriebssystemen ist dazu eine sogenannte Shebang erforderlich, die das nötige Programm aufruft. Außerdem muss die Datei noch ausführbar gemacht werden.

Das folgende CGI-Script gibt mit der print-Anweisung eine einfache Webseite. als mehrzeilige Zeichenkette aus:

script01.py
#!/usr/bin/env python3
print("""
<!DOCTYPE html>
 
<html lang="de">
  <head>
    <meta charset="utf-8">
    <title>Python-CGI-Programmierung</title>
  </head>
  <body>
    <h1>Hallo Welt, Python CGI!</h1>
  </body>
</html>
""")

Das Script muss nun in das cgi-bin Verzeichnis eines Webservers kopiert werden und kann über den Webbrowser aufgerufen werden. Wir wollen dazu den http.server von Python verwenden.

CGI-Script mit dem http.server von Python aufrufen

Zunächst erzeugen wir ein Verzeichnis cgi-bin und kopieren das Script hinein. In unserem Fall wurde das Verzeichnis cgi-bin direkt auf dem Laufwerk N: erzeugt.

Anschließend öffnen wir die Powershell und wechseln ins übergeordnete Verzeichnis von cgi-bin, also in unseren Fall direkt ins Laufwerk N:.

Danach starten wir den Webserver mit python -m http.server --cgi 8888, dabei startet python -m http.server den Server, --cgi macht den Server CGI-fähig und 8888 gibt den Port an, auf dem der Server läuft.

Jetzt können wir unser Script im Webbrowser mit http://localhost:8888/cgi-bin/script01.py aufrufen. Dabei ist http://localhost:8888 der lokale Webserver auf dem Port 8888, /cgi-bin/ das Verzeichnis, in dem das Script liegt und script01.py der Name des Scripts.

Erklärvideo


Aufgabe 1

Teste das Script!

Ein komplexeres Beispiel

Im folgenden Beispiel werden nun einige weitere Pythonfunktionen verwendet:

script02.py
#!/usr/bin/env python3
from datetime import date
 
today = date.today()
 
header = '''
<!DOCTYPE html>
 
<html lang="de">
    <head>
        <meta charset="utf-8">
        <title>Python - CGI-Programmierung</title>
 
    </head>
    <body>
'''
 
footer = '''
    </body>
</html>
'''
 
print(header)
print("<h1>Datumscript</h1>")
print("<p>Heute ist der ",today,"!</p>",sep='')
print(footer)
  • Mit der Zeile from datetime import date wird die Python-Datumsbibliothek importiert und mit today = date.today() wird das aktuelle Datum in die Variable today geschrieben.
  • Der Kopf- und Fußbereich der HTML-Seite wird in die Variablen header und footer geschrieben. Diese können dann mit print ausgegeben werden.
  • Nun werden die einzelnen HTML-Elemente ausgegeben:
    • print(header) der Kopfbereich der Webseite
    • print("<h1>Datumscript</h1>") die Überschrift
    • print("<p>Heute ist der ",today,"!</p>",sep='') das aktuelle Datum
    • print(footer) der Fußbereich der Webseite

Aufgabe 2

Teste das Script!

Aufgabe 3

Erweitere das Script, so dass auch noch die Uhrzeit ausgegeben wird!

python/pythoncgi/cgi.txt · Zuletzt geändert: 2023/06/16 15:53 von lutz