Python-CGI-Programmierung
Was ist CGI?
CGI wird derzeit von NCSA gepflegt, und NCSA definiert CGI wie folgt:
CGI (Common Gateway Interface) ist ein Programm, das auf einem Server wie einem HTTP-Server ausgeführt wird und eine Schnittstelle zu clientseitigen HTML-Seiten bereitstellt.
Hinweis:
Ab Python 3.11 wird das cgi-Modul offiziell als "Deprecated" gekennzeichnet und ab Python 3.13 wurde es entfernt.
Es wird empfohlen, zuFlask、DjangooderFastAPIund anderen modernen Web-Frameworks zu migrieren.
Web-Browsing
Um besser zu verstehen, wie CGI funktioniert, können wir uns den Prozess ansehen, der beim Klicken auf einen Link oder eine URL auf einer Webseite abläuft:
- 1. Verwenden Sie Ihren Browser, um auf die URL zuzugreifen und eine Verbindung zum HTTP-Webserver herzustellen.
- 2. Nachdem der Webserver die Anfrageinformationen empfangen hat, analysiert er die URL und prüft, ob die aufgerufene Datei auf dem Server existiert. Wenn sie existiert, gibt er den Dateiinhalt zurück; andernfalls gibt er eine Fehlermeldung zurück.
- 3. Der Browser empfängt die Informationen vom Server und zeigt die empfangene Datei oder Fehlermeldung an.
CGI-Programme können Python-Skripte, Perl-Skripte, Shell-Skripte, C- oder C++-Programme usw. sein.
CGI-Architekturdiagramm

Webserver-Unterstützung und -Konfiguration
Bevor Sie mit der CGI-Programmierung beginnen, stellen Sie sicher, dass Ihr Webserver CGI unterstützt und der CGI-Handler konfiguriert ist.
Apache unterstützt die CGI-Konfiguration:
CGI-Verzeichnis einrichten:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
Die von allen HTTP-Servern ausgeführten CGI-Programme werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis wird CGI-Verzeichnis genannt und heißt konventionell /var/www/cgi-bin.
Die Dateiendung für CGI ist.cgi, Python kann auch die.py.py-Endung verwenden.
Standardmäßig ist das cgi-bin-Verzeichnis, das für die Ausführung auf Linux-Servern konfiguriert ist, /var/www.
Wenn Sie ein anderes Verzeichnis für die Ausführung von CGI-Skripten angeben möchten, können Sie die Konfigurationsdatei httpd.conf wie folgt ändern:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all </Directory>
Fügen Sie das Suffix .py in AddHandler hinzu, damit wir auf Python-Skriptdateien zugreifen können, die mit .py enden:
AddHandler cgi-script .cgi .pl .py
Erstes CGI-Programm
Wir verwenden Python, um unser erstes CGI-Programm namens hello.py zu erstellen, das sich im Verzeichnis /var/www/cgi-bin befindet, mit folgendem Inhalt:
#!/usr/bin/python # -*- coding: UTF-8 -*- print "Content-type:text/html" print # 空行,告诉服务器结束头部 print '<html>' print '<head>' print '<meta charset="utf-8">' print '<title>Hello World - 我的第一个 CGI 程序!</title>' print '</head>' print '<body>' print '<h2>Hello World! 我是来自Example的第一CGI程序</h2>' print '</body>' print '</html>'
Nach dem Speichern der Datei ändern Sie hello.py und ändern Sie seine Dateiberechtigungen auf 755:
chmod 755 hello.py
Greifen Sie im Browser unterhttp://localhost/cgi-bin/hello.pyauf das obige Programm zu. Das angezeigte Ergebnis ist wie folgt:
Hello World! 我是来自Example的第一CGI程序
Dieses hello.py-Skript ist ein einfaches Python-Skript. Die Ausgabe "Content-type:text/html" in der ersten Zeile des Skripts wird an den Browser gesendet und teilt dem Browser mit, dass der anzuzeigende Inhaltstyp "text/html" ist.
Verwenden Sie print, um eine leere Zeile auszugeben und dem Server mitzuteilen, dass die Header-Informationen abgeschlossen sind.
HTTP-Header
Das "Content-type:text/html" im Inhalt der Datei hello.py ist Teil des HTTP-Headers. Es wird an den Browser gesendet, um dem Browser den Inhaltstyp der Datei mitzuteilen.
Das Format des HTTP-Headers ist wie folgt:
HTTP 字段名: 字段内容
Zum Beispiel:
Content-type: text/html
Die folgende Tabelle beschreibt die Informationen, die in CGI-Programmen häufig in HTTP-Headern verwendet werden:
| head | Beschreibung |
|---|---|
| Content-type: | Die MIME-Informationen, die der angeforderten Entität entsprechen. Zum Beispiel: Content-type:text/html |
| Expires: Datum | Das Datum und die Uhrzeit, zu der die Antwort abläuft |
| Location: URL | Wird verwendet, um den Empfänger zu einem anderen Ort als der angeforderten URL umzuleiten, um die Anforderung abzuschließen oder eine neue Ressource zu identifizieren |
| Last-modified: Datum | Die letzte Änderungszeit der angeforderten Ressource |
| Content-length: N | Die Inhaltslänge der Anforderung |
| Set-Cookie: String | Http Cookie setzen |
CGI-Umgebungsvariablen
Alle CGI-Programme erhalten die folgenden Umgebungsvariablen, die in CGI-Programmen eine wichtige Rolle spielen:
| Variablenname | Beschreibung |
|---|---|
| CONTENT_TYPE | Der Wert dieser Umgebungsvariable gibt den MIME-Typ der übergebenen Informationen an. Derzeit ist die Umgebungsvariable CONTENT_TYPE im Allgemeinen: application/x-www-form-urlencoded, was angibt, dass die Daten aus einem HTML-Formular stammen. |
| CONTENT_LENGTH | Wenn der Server und das CGI-Programm über die POST-Methode kommunizieren, ist diese Umgebungsvariable die Anzahl der Bytes gültiger Daten, die von der Standardeingabe STDIN gelesen werden können. Diese Umgebungsvariable muss beim Lesen der Eingabedaten verwendet werden. |
| HTTP_COOKIE | Der COOKIE-Inhalt im Client. |
| HTTP_USER_AGENT | Stellt Client-Browser-Informationen bereit, einschließlich Versionsnummern oder anderer proprietärer Daten. |
| PATH_INFO | Der Wert dieser Umgebungsvariable stellt zusätzliche Pfadinformationen dar, die unmittelbar auf den Namen des CGI-Programms folgen. Sie erscheint häufig als Parameter für das CGI-Programm. |
| QUERY_STRING | Wenn der Server und das CGI-Programm über die GET-Methode kommunizieren, ist der Wert dieser Umgebungsvariable die übergebene Information. Diese Information folgt auf den Namen des CGI-Programms und wird durch ein Fragezeichen '?' getrennt. |
| REMOTE_ADDR | Der Wert dieser Umgebungsvariable ist die IP-Adresse des Clients, der die Anfrage stellt, zum Beispiel 192.168.1.67 oben. Dieser Wert ist immer vorhanden. Darüber hinaus ist er die eindeutige Kennung, die der Web-Client dem Web-Server bereitstellen muss, und er kann im CGI-Programm verwendet werden, um verschiedene Web-Clients zu unterscheiden. |
| REMOTE_HOST | Der Wert dieser Umgebungsvariable enthält den Hostnamen des Clients, der die CGI-Anfrage sendet. Wenn er die Abfrage, die Sie durchführen möchten, nicht unterstützt, muss diese Umgebungsvariable nicht definiert werden. |
| REQUEST_METHOD | Gibt die Methode an, mit der das Skript aufgerufen wird. Bei Skripten, die das HTTP/1.0-Protokoll verwenden, sind nur GET und POST sinnvoll. |
| SCRIPT_FILENAME | Der vollständige Pfad des CGI-Skripts |
| SCRIPT_NAME | Der Name des CGI-Skripts |
| SERVER_NAME | Dies ist der Hostname, Alias oder die IP-Adresse Ihres WEB-Servers. |
| SERVER_SOFTWARE | Der Wert dieser Umgebungsvariable enthält den Namen und die Versionsnummer des HTTP-Servers, der das CGI-Programm aufruft. Der obige Wert ist beispielsweise Apache/2.2.14 (Unix). |
Das folgende ist ein einfaches CGI-Skript, das CGI-Umgebungsvariablen ausgibt:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# filename:test.py
import os
print "Content-type: text/html"
print
print "<meta charset=\"utf-8\">"
print "<b>环境变量</b><br>";
print "<ul>"
for key in os.environ.keys():
print "<li><span style='color:green'>%30s </span> : %s </li>" % (key,os.environ[key])
print "</ul>"
Speichern Sie den obigen Code als test.py und ändern Sie die Dateiberechtigungen auf 755. Das Ausführungsergebnis ist wie folgt:

GET- und POST-Methoden
Der Browser-Client übergibt Informationen auf zwei Wegen an den Server, nämlich über die GET-Methode und die POST-Methode.
Verwenden der GET-Methode zum Übertragen von Daten
Die GET-Methode sendet kodierte Benutzerinformationen an den Server. Die Daten sind in der URL der angeforderten Seite enthalten, getrennt durch ein "?"-Zeichen, wie unten gezeigt:
http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2Einige weitere Hinweise zu GET-Anfragen:
- GET-Anfragen können zwischengespeichert werden
- GET-Anfragen bleiben im Browserverlauf
- GET-Anfragen können als Lesezeichen gespeichert werden
- GET-Anfragen sollten nicht verwendet werden, wenn sensible Daten verarbeitet werden
- GET-Anfragen haben eine Längenbegrenzung
- GET-Anfragen sollten nur zum Abrufen von Daten verwendet werden
Einfaches URL-Beispiel: GET-Methode
Das Folgende ist eine einfache URL, die die GET-Methode verwendet, um zwei Parameter an das Programm hello_get.py zu senden:
/cgi-bin/test.py?name=Example&url=http://www.example.com
Das Folgende ist der Code für die Datei hello_get.py:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# filename:test.py
# CGI处理模块
import cgi, cgitb
# 创建 FieldStorage 的实例化
form = cgi.FieldStorage()
# 获取数据
site_name = form.getvalue('name')
site_url = form.getvalue('url')
print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>Example CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2>%s官网:%s</h2>" % (site_name, site_url)
print "</body>"
print "</html>"
Nach dem Speichern der Datei ändern Sie hello_get.py und ändern Sie die Dateiberechtigungen auf 755:
chmod 755 hello_get.py
Das Ausgabeergebnis der Browser-Anfrage ist:

Einfaches Formularbeispiel: GET-Methode
Das Folgende ist ein HTML-Formular, das die GET-Methode verwendet, um zwei Datenelemente an den Server zu senden. Das Server-Skript für die Übermittlung ist ebenfalls die Datei hello_get.py. Der Code von hello_get.html lautet wie folgt:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="../cgi-bin/hello_get.py" method="get"> 站点名称: <input type="text" name="name"> <br /> 站点 URL: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
Standardmäßig kann das Verzeichnis cgi-bin nur Skriptdateien speichern. Wir speichern hello_get.html im Verzeichnis test und ändern die Dateiberechtigungen auf 755:
chmod 755 hello_get.html
Die GIF-Demonstration wird unten gezeigt:

Verwenden der POST-Methode zum Übertragen von Daten
Die Verwendung der POST-Methode zum Übergeben von Daten an den Server ist sicherer und zuverlässiger. Sensible Informationen wie Benutzerpasswörter müssen mit POST übertragen werden.
Das Folgende ist ebenfalls hello_get.py, das auch vom Browser übermittelte POST-Formulardaten verarbeiten kann:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# CGI处理模块
import cgi, cgitb
# 创建 FieldStorage 的实例化
form = cgi.FieldStorage()
# 获取数据
site_name = form.getvalue('name')
site_url = form.getvalue('url')
print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>Example CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2>%s官网:%s</h2>" % (site_name, site_url)
print "</body>"
print "</html>"
Das folgende Formular verwendet die POST-Methode (method="post"), um Daten an das Serverskript hello_get.py zu senden:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="../cgi-bin/hello_get.py" method="post"> 站点名称: <input type="text" name="name"> <br /> 站点 URL: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> </body> </html>
Die GIF-Demonstration wird unten gezeigt:

Übergeben von Checkbox-Daten durch ein CGI-Programm
Checkbox wird verwendet, um Daten für eine oder mehrere Optionen zu übermitteln. Der HTML-Code lautet wie folgt:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="../cgi-bin/checkbox.py" method="POST" target="_blank"> <input type="checkbox" name="example" value="on" /> Example <input type="checkbox" name="google" value="on" /> Google <input type="submit" value="选择站点" /> </form> </body> </html>
Das Folgende ist der Code der Datei checkbox.py:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 引入 CGI 处理模块
import cgi, cgitb
# 创建 FieldStorage的实例
form = cgi.FieldStorage()
# 接收字段数据
if form.getvalue('google'):
google_flag = "是"
else:
google_flag = "否"
if form.getvalue('example'):
example_flag = "是"
else:
example_flag = "否"
print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>Example CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> Example是否选择了 : %s</h2>" % example_flag
print "<h2> Google 是否选择了 : %s</h2>" % google_flag
print "</body>"
print "</html>"
Ändern Sie die Berechtigungen von checkbox.py:
chmod 755 checkbox.py
GIF-Demonstration des Browserzugriffs:

Übergeben von Radio-Daten durch ein CGI-Programm
Radio übergibt nur einen Datenwert an den Server. Der HTML-Code lautet wie folgt:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="../cgi-bin/radiobutton.py" method="post" target="_blank"> <input type="radio" name="site" value="example" /> Example <input type="radio" name="site" value="google" /> Google <input type="submit" value="提交" /> </form> </body> </html>
Der Skriptcode von radiobutton.py lautet wie folgt:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 引入 CGI 处理模块
import cgi, cgitb
# 创建 FieldStorage的实例
form = cgi.FieldStorage()
# 接收字段数据
if form.getvalue('site'):
site = form.getvalue('site')
else:
site = "提交数据为空"
print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>Example CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 选中的网站是 %s</h2>" % site
print "</body>"
print "</html>"
Ändern Sie die Berechtigungen von radiobutton.py:
chmod 755 radiobutton.py
GIF-Demonstration des Browserzugriffs:

Übergeben von Textarea-Daten durch ein CGI-Programm
Textarea übergibt mehrzeilige Daten an den Server. Der HTML-Code lautet wie folgt:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="../cgi-bin/textarea.py" method="post" target="_blank"> <textarea name="textcontent" cols="40" rows="4"> 在这里输入内容... </textarea> <input type="submit" value="提交" /> </form> </body> </html>
Der Skriptcode von textarea.py lautet wie folgt:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 引入 CGI 处理模块
import cgi, cgitb
# 创建 FieldStorage的实例
form = cgi.FieldStorage()
# 接收字段数据
if form.getvalue('textcontent'):
text_content = form.getvalue('textcontent')
else:
text_content = "没有内容"
print "Content-type:text/html"
print
print "<html>"
print "<head>";
print "<meta charset=\"utf-8\">"
print "<title>Example CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 输入的内容是:%s</h2>" % text_content
print "</body>"
print "</html>"
Ändern Sie die Berechtigungen von textarea.py:
chmod 755 textarea.py
GIF-Demonstration des Browserzugriffs:

Übergeben von Dropdown-Daten durch ein CGI-Programm.
Der Code für das HTML-Dropdown-Feld lautet wie folgt:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="../cgi-bin/dropdown.py" method="post" target="_blank"> <select name="dropdown"> <option value="example" selected>Example</option> <option value="google">Google</option> </select> <input type="submit" value="提交"/> </form> </body> </html>
Der Skriptcode von dropdown.py ist wie unten gezeigt:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 引入 CGI 处理模块
import cgi, cgitb
# 创建 FieldStorage的实例
form = cgi.FieldStorage()
# 接收字段数据
if form.getvalue('dropdown'):
dropdown_value = form.getvalue('dropdown')
else:
dropdown_value = "没有内容"
print "Content-type:text/html"
print
print "<html>"
print "<head>"
print "<meta charset=\"utf-8\">"
print "<title>Example CGI 测试实例</title>"
print "</head>"
print "<body>"
print "<h2> 选中的选项是:%s</h2>" % dropdown_value
print "</body>"
print "</html>"
Ändern Sie die Berechtigungen von dropdown.py:
chmod 755 dropdown.py
GIF-Demonstration des Browserzugriffs:

Verwendung von Cookies in CGI
Ein großer Nachteil des HTTP-Protokolls besteht darin, dass es die Identität des Benutzers nicht feststellt, was Programmierern große Unannehmlichkeiten bereitet. Das Aufkommen der Cookie-Funktion macht diesen Mangel wett.
Ein Cookie ist eine Aufzeichnung von Daten, die über den Browser des Kunden auf die Festplatte des Kunden geschrieben werden, wenn der Kunde auf das Skript zugreift. Wenn der Kunde das nächste Mal auf das Skript zugreift, werden die Dateninformationen abgerufen, wodurch eine Identitätsunterscheidung erreicht wird. Cookies werden häufig zur Identitätsüberprüfung verwendet.
Cookie-Syntax
Das Senden von HTTP-Cookies erfolgt über den HTTP-Header. Es geht der Dateiübertragung voraus. Die Syntax des Set-Cookie-Headers lautet wie folgt:
Set-cookie:name=name;expires=date;path=path;domain=domain;secure
- name=name:Der Wert des Cookies muss festgelegt werden (name darf nicht die Zeichen ";" und "," verwenden). Wenn mehrere name-Werte vorhanden sind, werden sie durch ";" getrennt, zum Beispiel:name1=name1;name2=name2;name3=name3。
- expires=date:Gültigkeitsdauer des Cookies, Format: expires="Wdy,DD-Mon-YYYY HH:MM:SS"
- path=path: Legt den vom Cookie unterstützten Pfad fest. Wenn path ein Pfad ist, gilt das Cookie für alle Dateien und Unterverzeichnisse in diesem Verzeichnis, zum Beispiel: path="/cgi-bin/". Wenn path eine Datei ist, gilt das Cookie nur für diese Datei, zum Beispiel: path="/cgi-bin/cookie.cgi".
- domain=domain:Die Domain, für die das Cookie gültig ist, zum Beispiel: domain="www.example.com"
- secure:Wenn dieses Flag gesetzt ist, bedeutet das, dass das Cookie nur über einen HTTPS-Server unter Verwendung des SSL-Protokolls übertragen werden kann.
- Der Empfang von Cookies wird durch Setzen der Umgebungsvariable HTTP_COOKIE implementiert. Das CGI-Programm kann Cookie-Informationen durch Abrufen dieser Variable erhalten.
Cookie-Einstellungen
Das Setzen von Cookies ist sehr einfach. Das Cookie wird separat im HTTP-Header gesendet. Das folgende Beispiel setzt name und expires im Cookie:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
#
print 'Content-Type: text/html'
print 'Set-Cookie: name="Example";expires=Wed, 28 Aug 2016 18:30:00 GMT'
print
print """
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h1>Cookie set OK!</h1>
</body>
</html>
"""
Speichern Sie den obigen Code in cookie_set.py und ändern Sie die Berechtigungen von cookie_set.py:
chmod 755 cookie_set.py
Das obige Beispiel verwendet die Set-Cookie-Header-Informationen, um Cookie-Informationen zu setzen. In den Optionen werden andere Cookie-Attribute festgelegt, wie Ablaufzeit Expires, Domain und Pfad Path. Diese Informationen werden vor "Content-type:text/html" gesetzt.
Abrufen von Cookie-Informationen
Die Seite zum Abrufen der Cookie-Informationen ist sehr einfach. Cookie-Informationen werden in der CGI-Umgebungsvariable HTTP_COOKIE gespeichert. Das Speicherformat ist wie folgt:
key1=value1;key2=value2;key3=value3....
Das Folgende ist ein einfaches CGI-Programm zum Abrufen von Cookie-Informationen:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 导入模块
import os
import Cookie
print "Content-type: text/html"
print
print """
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<h1>读取cookie信息</h1>
"""
if 'HTTP_COOKIE' in os.environ:
cookie_string=os.environ.get('HTTP_COOKIE')
c=Cookie.SimpleCookie()
c.load(cookie_string)
try:
data=c['name'].value
print "cookie data: "+data+"<br>"
except KeyError:
print "cookie 没有设置或者已过期<br>"
print """
</body>
</html>
"""
Speichern Sie den obigen Code in cookie_get.py und ändern Sie die Berechtigungen von cookie_get.py:
chmod 755 cookie_get.py
Das GIF zur Demonstration der obigen Cookie-Farbeinstellung ist wie folgt:

Beispiel für Dateiupload
Das HTML-Formular zum Hochladen von Dateien muss dasenctypeAttribut aufmultipart/form-datasetzen, und der Code ist wie folgt:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<form enctype="multipart/form-data"
action="../cgi-bin/save_file.py" method="post">
<p>选中文件: <input type="file" name="filename" /></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>
Der Code der Skriptdatei save_file.py ist wie folgt:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import cgi, os
import cgitb; cgitb.enable()
form = cgi.FieldStorage()
# 获取文件名
fileitem = form['filename']
# 检测文件是否上传
if fileitem.filename:
# 设置文件路径
fn = os.path.basename(fileitem.filename)
open('/tmp/' + fn, 'wb').write(fileitem.file.read())
message = '文件 "' + fn + '" 上传成功'
else:
message = '文件没有上传'
print """\
Content-Type: text/html\n
<html>
<head>
<meta charset="utf-8">
<title>Example(example.com)</title>
</head>
<body>
<p>%s</p>
</body>
</html>
""" % (message,)
Speichern Sie den obigen Code in save_file.py und ändern Sie die Berechtigungen von save_file.py:
chmod 755 save_file.py
Das GIF zur Demonstration der obigen Cookie-Farbeinstellung ist wie folgt:

Wenn Sie ein Unix/Linux-System verwenden, müssen Sie das Dateitrennzeichen ersetzen. Unter Windows müssen Sie lediglich die open()-Anweisung verwenden:
fn = os.path.basename(fileitem.filename.replace("\\", "/" ))
Dateidownload-Dialog
Zuerst erstellen wir eine foo.txt-Datei im aktuellen Verzeichnis, damit das Programm sie herunterladen kann.
Der Dateidownload wird durch Festlegen von HTTP-Header-Informationen implementiert. Der funktionale Code lautet wie folgt:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# HTTP 头部
print "Content-Disposition: attachment; filename=\"foo.txt\"";
print
# 打开文件
fo = open("foo.txt", "rb")
str = fo.read();
print str
# 关闭文件
fo.close()
Andere Erweiterungen