Amikor az ügyfél az űrlapot elküldi a
kiszolgálónak, akkor a webkiszolgáló egy HTML űrlapon feldolgozza a kérést
olyan módon, hogy meghív egy külső programot. Miután a külső program végzett a
kérés feldolgozásával, az erdményül kapott HTML oldalt átadja a
webkiszolgálónak, mely elküldi azt az ügyfélnek. A külső programot nevezzük CGI
szkriptnek. Kezdjük egy mini CGI szkripttel:
#! /usr/local/bin/python
print "Content-Type: text/plain\n"
print "Hello"
Az első sor egy megjegyzés, amely egy Unix gépen
a Python parancsértelmező elérési útját adja meg. Windows rendszerben az első sort így kell
módosítani -vagy beállítástól függően el lehet hagyni:
#! C:\parancsértelmező_elérési_útja\python.
A második sor a HTML oldal MIME típusáról tájékoztatja a böngészőt. A
harmadik sor a megadott szöveget jeleníti meg a böngésző ablakában.
A cgi modul
A cgi szkriptnek importálnia kell a cgi modult. A cgi modul FieldStorage
osztálya felel az ügyféllel való kommunikációért. Amikor a szkript fogadja az
ügyfél űrlapon elküldött adatait, létrejön a FieldStorage osztály példánya,
amely POST metódusú hívások esetén az ügyfél standard bevitelét, GET metódusú
hívások esetén pedig a lekérdező karakterláncot olvassa be. Az osztálypéldány
objektuma egy szótárhoz hasonló adatszerkezet, amelyben a kulcsok az űrlapon
lévő vezérlőelemek nevének, az értékek pedig a vérlőelemek értékeinek felelnek
meg.
Példa: egy bejelentkezést, azonosítót és jelszót kérő oldal html
oldal, az ellenőrzést Python program végzi (bejelentkezes.htm)
<table border="0" width="100%" bgcolor="#A8C5E3">
<html>
<head>
<title>Bejelentkezesi lap </title>
</head>
<body>
<hr><center>
<form method="POST" action="http://localhost/cgi-bin/bejelentkezes.py">
<p>
Bejelentkezesi nev:
<input type="text" name="bejelentkezesi" value="">
</p>
<p>
Jelszo:
<input type="password" name="jelszo" value="">
</p>
<p>
<input type="submit" value="kuldes">
<input type="reset" value="alaphelyzet">
</p>
</form>
<hr>
</center>
</body>
</html>
Az adatokat feldolgozó szkript kódja
(bejelentkezes.py):
import cgi
print "Content-Type: text/html \n \n"
dynhtml='''
<html>
<head>
<title> %s </title>
</head>
<body>
<center><hr>
<h2> %s </h2> <h3> %s </h3>
<hr> </center>
</body>
</html>'''
#a regisztrált felhasználók azonosítója, kódja
users={'nagyzita':'1234', 'nagyzoli':'12345'}
fs=cgi.FieldStorage()
#az adott azonosító és az adott jelszó helyességének ellenőrzése
if fs.has_key('bejelentkezesi') and (fs['bejelentkezesi'].value!=""):
beirt_az=fs['bejelentkezesi'].value
if users.has_key(beirt_az):
if fs.has_key('jelszo'):
beirt_jelszo=fs['jelszo'].value
if beirt_jelszo==users[beirt_az]:
kapcs="Letrejött a kapcsolat"
uzenet="Üdvözöljük! \n"
else:
kapcs="Nincs kapcsolat"
uzenet="Hibás jelszó!"
else:
kapcs="Nincs kapcsolat"
uzenet="Nem adott meg jelszót!"
else:
kapcs="Nincs kapcsolat"
uzenet="Nincs ilyen felhasználó!"
print dynhtml % (kapcs, uzenet, beirt_az)
Ha a két file-t egybe szeretnénk írni (bejelentkezes.py), akkor :
import cgi
print "Content-Type: text/html \n \n"
#A kezdőlap html kódja, ua., mint a bejelentkezes.htm-nél
formhtml='''
<html>
...
</html>'''
#A bejelentkezési próbálkozások után megjelenő oldal html kódja, ua., mint az előbb
dynhtml='''
<html>
...
</html>'''
#a regisztrált felhasználók azonosítója, kódja
users={'nagyzita':'1234', 'nagyzoli':'12345'}
fs=cgi.FieldStorage()
#A kezdőlap megjelenítése
if not fs:
print formhtml
#A bejelentkezés utáni oldal megjenítése
elif fs.has_key('bejelentkezesi') and fs['bejelentkezesi'].value!="":
... #ugyanaz, mint az előbb