Start Programmierung Python Python in einfachen Beispielen : Dynamische Webseiten - Formular (CGI)
20 | 05 | 2012
Python in einfachen Beispielen : Dynamische Webseiten - Formular (CGI)
Geschrieben von: Joerg   
Mittwoch, den 13. April 2011 um 19:03 Uhr

Dynamische Webseiten sind Seiten, bei denen in der Regel eine Interaktion mit dem Nutzer stattfindet. Clientseitig kann dies bedeuten, dass ein Java-Skript  mit dem Anwender interagiert, beispielsweise könnte ein Währungsumrechner bereitgestellt werden. Serverseitig könnte dies ein Python-Skript sein, welches beim Aufruf zum gleichen Ergebnis führen kann, wie das Java-Skript. Nur findet hier die Verarbeitung auf der Serverseite statt, d.h. der Anwender sieht jeweils nur das Ergebnis dieser Aktion in dem Browser. Der Seitenquelltext zeigt uns in diesem Fall nur ein html-Dokument, ohne Hinweise auf die Art der Verarbeitung.

In einem einfachen Beispiel soll gezeigt werden, wie die Daten eines html-Formulars durch ein Python-Skript ausgewertet und wieder ausgegeben werden können. Die folgende html-Datei formular.html kann in das htdocs-Verzeichnis eines Apache-Servers gepackt werden. Das Auswertungsskript cgi-formular-auswertung.py liegt im cgi-bin-Verzeichnis des Servers (s.a. xampp). Falls wir die Apache-Konfigurationsdatei nicht ändern wollen, muss das Auswertungsskript die Endung .cgi haben.

Formular - HTML-Datei
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<html>
<head><title>Übertragung von Formularinhalten</title></head>
<body>
 
<h1> Gib Deinen Namen ein! </h1>
 
 
<form method="post" action="/cgi-bin/cgi_formular_auswertung.py" target="_blank">
<p>Dein Name: <input type="text" name="Anwender"/></p>
<p>Passwort : <input type="password" name="Passwort"/></p>
<p><textarea name="Textfeld" cols="50" rows="10"></textarea></p>
 
<p><input type="submit" name="submit"/></p>
 
</form>
 
</body>
 
</html>
 

 

 

Wer sich noch nicht mit HTML beschäftigt hat, der findet schnell im Internet geeignete Tutorials. Bekannt ist beispielsweise selfhtml. Für uns entscheidend ist das Formular zwischen den "form"-Tags.  Das Attribut  action weist auf die Ziel-Datei hin. Der Attribut-Wert _blank von target, weist den Browser an, die vom Server angeforderte Datei in einem neuen Fenster zu öffnen. Als Übertragungsmethode wurde post gewählt. Die Eingabefelder sind selbsterklärend. submit ist der Übertragungsbutton. Es gibt eine Reihe weiterer Formular-Elemente. Der Name des jeweiligen Elementes ermöglicht uns, serverseitig auf die richtige Eingabe zuzugreifen.

Das Ergebnis:

cgi3

/cgi-bin/cgi_formular_auswertung.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!E:\xampp\Python27\python.exe
#-*- coding: utf-8 -*-
# file: /cgi-bin/formular.py
 
import cgi
 
# Das aufrufende Programm ist ein normales html-Dokument
# In Python wird, ähnlich wie in PHP, Python-Code gemischt mit
# HTML-Anweisungen.
# Mit einer Instanz der Klasse FieldStorage können wir auf durch
# POST oder GET übertragene Daten zugreifen.
# Lange Texte können mit print """ mehrzeiliger Text """ ausgegeben
# werden. Die Angabe der Sprachcodierung UTF-8 ermöglicht es, direkt
# mit Umlauten in HTML-Texten zu arbeiten.
 
print "Content-type: text/html; charset=UTF-8"
print # Leerzeile (muss sein!)
 
 
print """
<html>
<head><title>Übertragung von Formularinhalten</title></head>
<body>
<h1>Die übertragenen Daten.</h1>
"""
 
form=cgi.FieldStorage()
s1=form["Anwender"].value
s2=form["Passwort"].value
 
if form.getvalue("Textfeld"):
text= form.getvalue("Textfeld")
else:
text= "keine Eingabe"
 
print " <p>Dein Name lautet, :", s1,"</p>"
print "<p>Passwort : ",s2,"</p>"
 
print "<p>Der folgende Text wurde eingegeben:",text,"</p>"
print " </body> </html>"
 

Erläuterung:

Aus dem Modul cgi verwenden wir Klasse FieldStorage. Wir erzeugen eine Instanz dieser Klasse. Hier beispielsweise heißt diese form. Wir können natürlich auch andere Namen wählen. Über geeignete Attribute oder Methoden können wir nun auf die übertragenen Daten zugreifen. In unserem Falle geben wir sie nur wiederum in einem html-Dokument aus.

 

Das Ergebnis:

cgi4

 

Der Quelltext des html-Dokumentes:

Der Quelltext der Auswertungsseite
1
2
3
4
5
6
7
8
9
10
11
      <html>
<head><title>Übertragung von Formularinhalten</title></head>
<body>
<h1>Die übertragenen Daten.</h1>
 
<p>Dein Name lautet, : joerg </p>
<p>Passwort : sehr geheim </p>
<p>Der folgende Text wurde eingegeben: Dies ist ein Text. </p>
 
</body> </html>
 
      
Übertragung von Formularinhalten

Tags: