A Python programozási nyelv

CGI

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