Python 3 - CGI-Programmierung
Das Common Gateway Interface (CGI) ist eine Reihe von Standards, die definieren, wie Informationen zwischen dem Webserver und einem benutzerdefinierten Skript ausgetauscht werden. Die CGI-Spezifikationen werden derzeit von der NCSA verwaltet.
Was ist CGI?
Das Common Gateway Interface (CGI) ist ein Standard für externe Gateway-Programme zur Schnittstelle mit Informationsservern wie HTTP-Servern.
Die aktuelle Version ist CGI / 1.1 und CGI / 1.2 ist in Bearbeitung.
Surfen im Internet
Um das Konzept von CGI zu verstehen, lassen Sie uns sehen, was passiert, wenn wir auf einen Hyperlink klicken, um eine bestimmte Webseite oder URL zu durchsuchen.
Ihr Browser kontaktiert den HTTP-Webserver und fordert die URL an, dh den Dateinamen.
Der Webserver analysiert die URL und sucht nach dem Dateinamen. Wenn diese Datei gefunden wird, wird sie an den Browser zurückgesendet. Andernfalls wird eine Fehlermeldung gesendet, die angibt, dass Sie eine falsche Datei angefordert haben.
Der Webbrowser nimmt die Antwort vom Webserver entgegen und zeigt entweder die empfangene Datei oder die Fehlermeldung an.
Es ist jedoch möglich, den HTTP-Server so einzurichten, dass diese Datei nicht zurückgesendet wird, wenn eine Datei in einem bestimmten Verzeichnis angefordert wird. Stattdessen wird es als Programm ausgeführt, und alles, was dieses Programm ausgibt, wird zur Anzeige durch Ihren Browser zurückgesendet. Diese Funktion wird als Common Gateway Interface oder CGI bezeichnet, und die Programme werden als CGI-Skripte bezeichnet. Diese CGI-Programme können ein Python-Skript, ein PERL-Skript, ein Shell-Skript, ein C- oder C ++ - Programm usw. sein.
CGI-Architekturdiagramm
Unterstützung und Konfiguration von Webservern
Bevor Sie mit der CGI-Programmierung fortfahren, stellen Sie sicher, dass Ihr Webserver CGI unterstützt und für die Verarbeitung von CGI-Programmen konfiguriert ist. Alle vom HTTP-Server auszuführenden CGI-Programme werden in einem vorkonfigurierten Verzeichnis gespeichert. Dieses Verzeichnis heißt CGI-Verzeichnis und wird üblicherweise als / var / www / cgi-bin bezeichnet. Konventionell haben CGI-Dateien die Erweiterung als.cgi, Sie können Ihre Dateien jedoch mit der Python-Erweiterung behalten .py auch.
Standardmäßig ist der Linux-Server so konfiguriert, dass nur die Skripts im Verzeichnis cgi-bin in / var / www ausgeführt werden. Wenn Sie ein anderes Verzeichnis angeben möchten, in dem Ihre CGI-Skripte ausgeführt werden sollen, kommentieren Sie die folgenden Zeilen in der Datei httpd.conf:
<Directory "/var/www/cgi-bin">
AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all
</Directory>
<Directory "/var/www/cgi-bin">
Options All
</Directory>
Hier gehen wir davon aus, dass Sie den Webserver erfolgreich eingerichtet haben und jedes andere CGI-Programm wie Perl oder Shell usw. ausführen können.
Erstes CGI-Programm
Hier ist ein einfacher Link, der mit einem CGI-Skript namens hello.py verknüpft ist . Diese Datei befindet sich im Verzeichnis / var / www / cgi-bin und enthält folgenden Inhalt. Stellen Sie vor dem Ausführen Ihres CGI-Programms sicher, dass Sie den Dateimodus mit verwendenchmod 755 hello.py UNIX-Befehl, um die Datei ausführbar zu machen.
#!/usr/bin/python
print ("Content-type:text/html\r\n\r\n")
print ('<html>')
print ('<head>')
print ('<title>Hello Word - First CGI Program</title>')
print ('</head>')
print ('<body>')
print ('<h2>Hello Word! This is my first CGI program</h2>')
print ('</body>')
print ('</html>')
Note- Die erste Zeile im Skript muss der Pfad zur ausführbaren Python-Datei sein. Unter Linux sollte es #! / Usr / bin / python3 sein
Geben Sie die folgende URL in Ihren Browser ein
http://localhost:8080/cgi-bin/hello.py
Hello Word! This is my first CGI program
Dieses hello.py-Skript ist ein einfaches Python-Skript, das seine Ausgabe in die STDOUT-Datei, dh in den Bildschirm, schreibt. Es gibt eine wichtige und zusätzliche Funktion, nämlich die erste zu druckende ZeileContent-type:text/html\r\n\r\n. Diese Zeile wird an den Browser zurückgesendet und gibt den Inhaltstyp an, der auf dem Browserbildschirm angezeigt werden soll.
Inzwischen müssen Sie das Grundkonzept von CGI verstanden haben und können mit Python viele komplizierte CGI-Programme schreiben. Dieses Skript kann mit jedem anderen externen System interagieren, um auch Informationen wie RDBMS auszutauschen.
HTTP-Header
Die Linie Content-type:text/html\r\n\r\nist Teil des HTTP-Headers, der an den Browser gesendet wird, um den Inhalt zu verstehen. Der gesamte HTTP-Header hat die folgende Form:
HTTP Field Name: Field Content
For Example
Content-type: text/html\r\n\r\n
Es gibt nur wenige andere wichtige HTTP-Header, die Sie häufig in Ihrer CGI-Programmierung verwenden.
Sr.Nr. | Header & Beschreibung |
---|---|
1 | Content-type: Eine MIME-Zeichenfolge, die das Format der zurückgegebenen Datei definiert. Beispiel ist Inhaltstyp: Text / HTML |
2 | Expires: Date Das Datum, an dem die Informationen ungültig werden. Es wird vom Browser verwendet, um zu entscheiden, wann eine Seite aktualisiert werden muss. Eine gültige Datumszeichenfolge hat das Format 01. Januar 1998, 12:00:00 GMT. |
3 | Location: URL Die URL, die anstelle der angeforderten URL zurückgegeben wird. In diesem Feld können Sie eine Anforderung an eine beliebige Datei umleiten. |
4 | Last-modified: Date Das Datum der letzten Änderung der Ressource. |
5 | Content-length: N Die Länge der zurückgegebenen Daten in Byte. Der Browser verwendet diesen Wert, um die geschätzte Downloadzeit für eine Datei anzugeben. |
6 | Set-Cookie: String Setzen Sie den Cookie, der durch die Zeichenfolge geleitet wird |
CGI-Umgebungsvariablen
Alle CGI-Programme haben Zugriff auf die folgenden Umgebungsvariablen. Diese Variablen spielen beim Schreiben eines CGI-Programms eine wichtige Rolle.
Sr.Nr. | Variablenname & Beschreibung |
---|---|
1 | CONTENT_TYPE Der Datentyp des Inhalts. Wird verwendet, wenn der Client angehängte Inhalte an den Server sendet. Zum Beispiel das Hochladen von Dateien. |
2 | CONTENT_LENGTH Die Länge der Abfrageinformationen. Es ist nur für POST-Anfragen verfügbar. |
3 | HTTP_COOKIE Gibt die gesetzten Cookies in Form eines Schlüssel-Wert-Paares zurück. |
4 | HTTP_USER_AGENT Das Feld User-Agent-Anforderungsheader enthält Informationen zu dem Benutzeragenten, von dem die Anforderung stammt. Es ist der Name des Webbrowsers. |
5 | PATH_INFO Der Pfad für das CGI-Skript. |
6 | QUERY_STRING Die URL-codierten Informationen, die mit der GET-Methodenanforderung gesendet werden. |
7 | REMOTE_ADDR Die IP-Adresse des Remote-Hosts, der die Anforderung stellt. Dies ist nützlich für die Protokollierung oder zur Authentifizierung. |
8 | REMOTE_HOST Der vollständig qualifizierte Name des Hosts, der die Anforderung stellt. Wenn diese Informationen nicht verfügbar sind, kann REMOTE_ADDR verwendet werden, um die IR-Adresse abzurufen. |
9 | REQUEST_METHOD Die Methode, mit der die Anforderung gestellt wurde. Die gebräuchlichsten Methoden sind GET und POST. |
10 | SCRIPT_FILENAME Der vollständige Pfad zum CGI-Skript. |
11 | SCRIPT_NAME Der Name des CGI-Skripts. |
12 | SERVER_NAME Der Hostname oder die IP-Adresse des Servers |
13 | SERVER_SOFTWARE Der Name und die Version der Software, die auf dem Server ausgeführt wird. |
Hier ist ein kleines CGI-Programm, um alle CGI-Variablen aufzulisten. Klicken Sie auf diesen Link, um das Ergebnis Get Environment anzuzeigen
#!/usr/bin/python
import os
print ("Content-type: text/html\r\n\r\n");
print ("<font size=+1>Environment</font><\br>");
for param in os.environ.keys():
print ("<b>%20s</b>: %s<\br>" % (param, os.environ[param]))
GET- und POST-Methoden
Sie müssen auf viele Situationen gestoßen sein, in denen Sie einige Informationen von Ihrem Browser an den Webserver und letztendlich an Ihr CGI-Programm übergeben müssen. Am häufigsten verwendet der Browser zwei Methoden, um diese Informationen an den Webserver weiterzugeben. Diese Methoden sind GET-Methode und POST-Methode.
Übergabe von Informationen mit der GET-Methode
Die GET-Methode sendet die codierten Benutzerinformationen, die an die Seitenanforderung angehängt sind. Die Seite und die verschlüsselten Informationen werden durch das? Zeichen wie folgt -
http://www.test.com/cgi-bin/hello.py?key1=value1&key2=value2
Die GET-Methode ist die Standardmethode zum Übergeben von Informationen vom Browser an den Webserver und erzeugt eine lange Zeichenfolge, die im Feld Speicherort: Ihres Browsers angezeigt wird.
Verwenden Sie niemals die GET-Methode, wenn Sie ein Kennwort oder andere vertrauliche Informationen haben, die an den Server übergeben werden sollen.
Die GET-Methode hat eine Größenbeschränkung: In einer Anforderungszeichenfolge können nur 1024 Zeichen gesendet werden.
Die GET-Methode sendet Informationen mithilfe des QUERY_STRING-Headers und ist in Ihrem CGI-Programm über die Umgebungsvariable QUERY_STRING zugänglich.
Sie können Informationen übergeben, indem Sie einfach Schlüssel- und Wertepaare zusammen mit einer beliebigen URL verketten, oder Sie können HTML-Tags <FORM> verwenden, um Informationen mithilfe der GET-Methode zu übergeben.
Einfaches URL-Beispiel: Get-Methode
Hier ist eine einfache URL, die mithilfe der GET-Methode zwei Werte an das Programm hello_get.py übergibt.
/cgi-bin/hello_get.py?first_name=ZARA&last_name=ALIDrunter ist hello_get.pySkript für die Eingabe durch den Webbrowser. Wir werden verwendencgi Modul, das den Zugriff auf übergebene Informationen sehr einfach macht -
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print ("Content-type:text/html\r\n\r\n")
print ("<html>")
print ("<head>")
print ("<title>Hello - Second CGI Program</title>")
print ("</head>")
print ("<body>")
print ("<h2>Hello %s %s</h2>" % (first_name, last_name))
print ("</body>")
print ("</html>")
Dies würde das folgende Ergebnis erzeugen -
Hello ZARA ALI
Einfaches FORMULAR Beispiel: GET-Methode
In diesem Beispiel werden zwei Werte mit HTML FORM und der Schaltfläche "Senden" übergeben. Wir verwenden dasselbe CGI-Skript hello_get.py, um diese Eingabe zu verarbeiten.
<form action = "/cgi-bin/hello_get.py" method = "get">
First Name: <input type = "text" name = "first_name"> <br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
Hier ist die tatsächliche Ausgabe des obigen Formulars. Sie geben Vor- und Nachnamen ein und klicken dann auf die Schaltfläche Senden, um das Ergebnis anzuzeigen.
Weitergabe von Informationen mithilfe der POST-Methode
Eine allgemein zuverlässigere Methode zum Übergeben von Informationen an ein CGI-Programm ist die POST-Methode. Dadurch werden die Informationen genauso verpackt wie bei GET-Methoden, jedoch nicht als Textzeichenfolge nach einem? In der URL wird es als separate Nachricht gesendet. Diese Nachricht wird in Form der Standardeingabe in das CGI-Skript eingegeben.
Unten finden Sie dasselbe Skript hello_get.py, das sowohl die GET- als auch die POST-Methode behandelt.
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
first_name = form.getvalue('first_name')
last_name = form.getvalue('last_name')
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Hello - Second CGI Program</title>"
print "</head>"
print "<body>"
print "<h2>Hello %s %s</h2>" % (first_name, last_name)
print "</body>"
print "</html>"
Nehmen wir noch einmal das gleiche Beispiel wie oben, bei dem zwei Werte mit HTML FORM und der Schaltfläche "Senden" übergeben werden. Wir verwenden dasselbe CGI-Skript hello_get.py, um diese Eingabe zu verarbeiten.
<form action = "/cgi-bin/hello_get.py" method = "post">
First Name: <input type = "text" name = "first_name"><br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
Hier ist die tatsächliche Ausgabe des obigen Formulars. Sie geben Vor- und Nachnamen ein und klicken dann auf die Schaltfläche Senden, um das Ergebnis anzuzeigen.
Übergeben von Checkbox-Daten an das CGI-Programm
Kontrollkästchen werden verwendet, wenn mehr als eine Option ausgewählt werden muss.
Hier ist ein Beispiel für einen HTML-Code für ein Formular mit zwei Kontrollkästchen:
<form action = "/cgi-bin/checkbox.cgi" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" value = "on" /> Maths
<input type = "checkbox" name = "physics" value = "on" /> Physics
<input type = "submit" value = "Select Subject" />
</form>
Das Ergebnis dieses Codes ist das folgende Formular:
Unten finden Sie das Skript checkbox.cgi, mit dem Eingaben des Webbrowsers für die Schaltfläche zum Aktivieren der Kontrollkästchen verarbeitet werden.
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
if form.getvalue('maths'):
math_flag = "ON"
else:
math_flag = "OFF"
if form.getvalue('physics'):
physics_flag = "ON"
else:
physics_flag = "OFF"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Checkbox - Third CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> CheckBox Maths is : %s</h2>" % math_flag
print "<h2> CheckBox Physics is : %s</h2>" % physics_flag
print "</body>"
print "</html>"
Weitergabe von Optionsfelddaten an das CGI-Programm
Optionsfelder werden verwendet, wenn nur eine Option ausgewählt werden muss.
Hier ist ein Beispiel für einen HTML-Code für ein Formular mit zwei Optionsfeldern:
<form action = "/cgi-bin/radiobutton.py" method = "post" target = "_blank">
<input type = "radio" name = "subject" value = "maths" /> Maths
<input type = "radio" name = "subject" value = "physics" /> Physics
<input type = "submit" value = "Select Subject" />
</form>
Das Ergebnis dieses Codes ist das folgende Formular:
Unten finden Sie das Skript radiobutton.py, um die vom Webbrowser für das Optionsfeld eingegebenen Eingaben zu verarbeiten.
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
if form.getvalue('subject'):
subject = form.getvalue('subject')
else:
subject = "Not set"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Radio - Fourth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"
Übergeben von Textbereichsdaten an das CGI-Programm
Das TEXTAREA-Element wird verwendet, wenn mehrzeiliger Text an das CGI-Programm übergeben werden muss.
Hier ist ein Beispiel für einen HTML-Code für ein Formular mit einer TEXTAREA-Box:
<form action = "/cgi-bin/textarea.py" method = "post" target = "_blank">
<textarea name = "textcontent" cols = "40" rows = "4">
Type your text here...
</textarea>
<input type = "submit" value = "Submit" />
</form>
Das Ergebnis dieses Codes ist das folgende Formular:
Unten finden Sie das Skript textarea.cgi für die Eingabe durch den Webbrowser.
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
if form.getvalue('textcontent'):
text_content = form.getvalue('textcontent')
else:
text_content = "Not entered"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>";
print "<title>Text Area - Fifth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Entered Text Content is %s</h2>" % text_content
print "</body>"
Übergabe von Dropdown-Box-Daten an das CGI-Programm
Dropdown-Box wird verwendet, wenn viele Optionen verfügbar sind, aber nur eine oder zwei ausgewählt werden.
Hier ist ein Beispiel für einen HTML-Code für ein Formular mit einem Dropdown-Feld:
<form action = "/cgi-bin/dropdown.py" method = "post" target = "_blank">
<select name = "dropdown">
<option value = "Maths" selected>Maths</option>
<option value = "Physics">Physics</option>
</select>
<input type = "submit" value = "Submit"/>
</form>
Das Ergebnis dieses Codes ist das folgende Formular:
Unten finden Sie das Skript dropdown.py für die Eingabe durch den Webbrowser.
#!/usr/bin/python
# Import modules for CGI handling
import cgi, cgitb
# Create instance of FieldStorage
form = cgi.FieldStorage()
# Get data from fields
if form.getvalue('dropdown'):
subject = form.getvalue('dropdown')
else:
subject = "Not entered"
print "Content-type:text/html\r\n\r\n"
print "<html>"
print "<head>"
print "<title>Dropdown Box - Sixth CGI Program</title>"
print "</head>"
print "<body>"
print "<h2> Selected Subject is %s</h2>" % subject
print "</body>"
print "</html>"
Verwenden von Cookies in CGI
Das HTTP-Protokoll ist ein zustandsloses Protokoll. Für eine kommerzielle Website ist es erforderlich, Sitzungsinformationen zwischen verschiedenen Seiten zu verwalten. Beispielsweise endet eine Benutzerregistrierung nach Abschluss vieler Seiten. Wie kann ich die Sitzungsinformationen des Benutzers auf allen Webseiten verwalten?
In vielen Situationen ist die Verwendung von Cookies die effizienteste Methode, um Einstellungen, Einkäufe, Provisionen und andere Informationen zu speichern und zu verfolgen, die für eine bessere Besuchererfahrung oder Site-Statistiken erforderlich sind.
Wie es funktioniert?
Ihr Server sendet einige Daten in Form eines Cookies an den Browser des Besuchers. Der Browser akzeptiert möglicherweise das Cookie. In diesem Fall wird es als Nur-Text-Datensatz auf der Festplatte des Besuchers gespeichert. Wenn der Besucher nun auf einer anderen Seite Ihrer Website ankommt, kann das Cookie abgerufen werden. Nach dem Abrufen weiß Ihr Server, was gespeichert wurde.
Cookies sind ein Nur-Text-Datensatz mit 5 Feldern variabler Länge.
Expires- Das Datum, an dem der Cookie abläuft. Wenn dies leer ist, läuft das Cookie ab, wenn der Besucher den Browser verlässt.
Domain - Der Domainname Ihrer Site.
Path- Der Pfad zu dem Verzeichnis oder der Webseite, in dem das Cookie gesetzt wird. Dies kann leer sein, wenn Sie das Cookie aus einem beliebigen Verzeichnis oder einer beliebigen Seite abrufen möchten.
Secure- Wenn dieses Feld das Wort "sicher" enthält, kann das Cookie nur mit einem sicheren Server abgerufen werden. Wenn dieses Feld leer ist, besteht keine solche Einschränkung.
Name = Value - Cookies werden in Form von Schlüssel- und Wertepaaren gesetzt und abgerufen.
Cookies einrichten
Es ist sehr einfach, Cookies an den Browser zu senden. Diese Cookies werden zusammen mit dem HTTP-Header an das Feld Inhaltstyp gesendet. Angenommen, Sie möchten Benutzer-ID und Kennwort als Cookies festlegen. Das Setzen der Cookies erfolgt wie folgt:
#!/usr/bin/python
print "Set-Cookie:UserID = XYZ;\r\n"
print "Set-Cookie:Password = XYZ123;\r\n"
print "Set-Cookie:Expires = Tuesday, 31-Dec-2007 23:12:40 GMT;\r\n"
print "Set-Cookie:Domain = www.tutorialspoint.com;\r\n"
print "Set-Cookie:Path = /perl;\n"
print "Content-type:text/html\r\n\r\n"
...........Rest of the HTML Content....
In diesem Beispiel müssen Sie verstanden haben, wie Cookies gesetzt werden. Wir gebrauchenSet-Cookie HTTP-Header zum Setzen von Cookies.
Es ist optional, Cookie-Attribute wie Expires, Domain und Path festzulegen. Es ist bemerkenswert, dass Cookies gesetzt werden, bevor eine magische Linie gesendet wird"Content-type:text/html\r\n\r\n.
Cookies abrufen
Es ist sehr einfach, alle gesetzten Cookies abzurufen. Cookies werden in der CGI-Umgebungsvariablen HTTP_COOKIE gespeichert und haben die folgende Form:
key1 = value1;key2 = value2;key3 = value3....
Hier ist ein Beispiel zum Abrufen von Cookies.
#!/usr/bin/python
# Import modules for CGI handling
from os import environ
import cgi, cgitb
if environ.has_key('HTTP_COOKIE'):
for cookie in map(strip, split(environ['HTTP_COOKIE'], ';')):
(key, value ) = split(cookie, '=');
if key == "UserID":
user_id = value
if key == "Password":
password = value
print "User ID = %s" % user_id
print "Password = %s" % password
Dies führt zu folgendem Ergebnis für die durch das obige Skript gesetzten Cookies:
User ID = XYZ
Password = XYZ123
Beispiel für das Hochladen von Dateien
Um eine Datei hochzuladen, muss für das HTML-Formular das Attribut enctype auf gesetzt sein multipart/form-data. Das Eingabe-Tag mit dem Dateityp erstellt eine Schaltfläche "Durchsuchen".
<html>
<body>
<form enctype = "multipart/form-data" action = "save_file.py" method = "post">
<p>File: <input type = "file" name = "filename" /></p>
<p><input type = "submit" value = "Upload" /></p>
</form>
</body>
</html>
Das Ergebnis dieses Codes ist das folgende Formular:
Das obige Beispiel wurde absichtlich deaktiviert, um Personen zu speichern, die Dateien auf unseren Server hochladen. Sie können jedoch den obigen Code mit Ihrem Server ausprobieren.
Hier ist das Skript save_file.py zum Hochladen von Dateien -
#!/usr/bin/python
import cgi, os
import cgitb; cgitb.enable()
form = cgi.FieldStorage()
# Get filename here.
fileitem = form['filename']
# Test if the file was uploaded
if fileitem.filename:
# strip leading path from file name to avoid
# directory traversal attacks
fn = os.path.basename(fileitem.filename)
open('/tmp/' + fn, 'wb').write(fileitem.file.read())
message = 'The file "' + fn + '" was uploaded successfully'
else:
message = 'No file was uploaded'
print """\
Content-Type: text/html\n
<html>
<body>
<p>%s</p>
</body>
</html>
""" % (message,)
Wenn Sie das obige Skript unter Unix / Linux ausführen, müssen Sie darauf achten, das Dateitrennzeichen wie folgt zu ersetzen. Andernfalls sollte die Anweisung open () auf Ihrem Windows-Computer einwandfrei funktionieren.
fn = os.path.basename(fileitem.filename.replace("\\", "/" ))
Wie rufe ich ein Dialogfeld "Dateidownload" auf?
Manchmal ist es erwünscht, dass Sie eine Option angeben möchten, bei der ein Benutzer auf einen Link klicken kann, und dem Benutzer ein Dialogfeld "Dateidownload" angezeigt wird, anstatt den tatsächlichen Inhalt anzuzeigen. Dies ist sehr einfach und kann über den HTTP-Header erreicht werden. Dieser HTTP-Header unterscheidet sich von dem im vorherigen Abschnitt erwähnten Header.
Zum Beispiel, wenn Sie eine machen möchten FileName Datei von einem bestimmten Link herunterladbar, dann ist ihre Syntax wie folgt -
#!/usr/bin/python
# HTTP Header
print "Content-Type:application/octet-stream; name = \"FileName\"\r\n";
print "Content-Disposition: attachment; filename = \"FileName\"\r\n\n";
# Actual File Content will go here.
fo = open("foo.txt", "rb")
str = fo.read();
print str
# Close opend file
fo.close()
Ich hoffe, Ihnen hat dieses Tutorial gefallen. Wenn ja, senden Sie mir bitte Ihr Feedback an: Kontaktieren Sie uns