Académique Documents
Professionnel Documents
Culture Documents
Introduction
CGI (Common Gateway Interface) définit une méthode d'interaction entre un serveur web et des
programmes générateurs de contenu externes, plus souvent appelés programmes CGI ou scripts
CGI. Il s'agit d'une méthode simple pour ajouter du contenu dynamique à votre site web en utilisant
votre langage de programmation préféré.
Dans ce cours, nous allons montrer comment faire pour :
1- activer le module cgid d’apache2 pour la prise en compte des scripts
2- écrire un script cgi en python
3- appeler un script cgi à travers un formulaire html
4- recuperer des paramètres reçus par un script cgi python
http://localhost/cgi-bin/nomscript.py
#!/usr/bin/python3
print('Content-Type: text/plain')
print('')
print('Ceci est un test de CGI 12 !')
explication :
On commence par preciser l’interpreteur python
#!/usr/bin/python3
Puis on crée une ligne vide entre l’entête et le corps des messages HTTP
print('')
dans notre cas, après la première ligne qui est indique l’interpréteur python, on ajoute la ligne :
import MysQLdb
Si la requête sql doit comporter des variables ou paramètres d’une fonction , on remplace chaque
variable par %s
Ensuite, on crée une variable tuple ( vecteur avec une ou plusieurs composantes) contenant
les variables ou paramètres
E4- On se connecte à la base de données en utilisant un utilisateur qui a des droits, tout le
paramètre conn de connexion au serveur de BD et le curseur qui nous permettra exécuter plus
tard des requêtes
Par exemple
curseur= conn.cursor()
Dans cet exemple, on n’a pas précisé le paramètre host=’ipserveurBD’ car la base de données est
locale
le compte crée sur le SGBD qui les droits sur notre base banque est bouki2 avec le mot de passe
P@sser123
curseur.execute(req,val)
mais
si la requete contient une seule variable ou paramètre val doit quand même avoir virgule comme
suit :
val=(para,)
si la requête ne contient pas parametre alors execute ne prendra pas le deuxieme parametre
comme suit :
curseur.execute(req)
Attention, si la requete doit modifier la base, on doit apres l’execution de la requete, valider
les modifications par la commande conn.commit()
E6- Au cas où la requête retourne des résultats qu’on voudrait exploiter, on peut la méthode
fetchall() qui mettra les résultats de la requête dans un tableau qu’on pourrait parcourir par
la boucle :
#!/usr/bin/python3
import MySQLdb
print("Content-Type: text/html")
print()
print("<html><head><title>Comptes</title></head>")
print("<body>")
connection = MySQLdb.connect(user='bouki2', passwd='P@sser123', db='banque')
cursor = connection.cursor()
cursor.execute("SELECT * from clients")
print('<table border="1px">')
print("<tr><td>Prenom</td><td>Nom</td><td>Numcompte</td><td>Code</td><td>Solde</
td></tr>")
for row in cursor.fetchall():
print("<tr><td>%s </td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>" %
(row[1],row[2],row[3],row[4],row[5]))
print ("</table>")
print ("</body></html>")
connection.close()
Test dans un navigateur
F- Méthodologie à suivre pour recuperer les données d’un formulaire dans un script cgi
F1- on recupere le formulaire dans une variable puis on extrait la valeur de chaque champ
par exemple
form = cgi.FieldStorage()
prenom = form.getvalue('prenom')
nom = form.getvalue('nom')
numcompte = form.getvalue('numcompte')
code = form.getvalue('code')
montant = form.getvalue('montant')
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
import cgi, cgitb
import MySQLdb
def database():
global conn,cursor
conn=MySQLdb.connect(user='bouki2', passwd='P@sser123', db='banque')
cursor=conn.cursor()
def inserer(prenom,nom,numcompte,code,montant):
sql="insert into clients (prenom, nom,numcompte,code,montant) values (%s, %s, %s, %s,%s)"
database()
val = (prenom,nom,numcompte,code,montant)
cursor.execute(sql,val)
conn.commit()
print("Content-Type: text/html")
print()
print("<html><head><title>Comptes</title></head>")
print("<body>")
orm = cgi.FieldStorage()
prenom = form.getvalue('prenom')
nom = form.getvalue('nom')
numcompte = form.getvalue('numcompte')
code = form.getvalue('code')
montant = form.getvalue('montant')
inserer(prenom,nom,numcompte,code,montant)
print("Insertion reussie")
print("</body>")
print("</html>")
Exemple
!doctype html>
<html>
<head>
<title>demo cgi</title>
</head>
<body>
<form name="pyform" method="POST" action="/cgi-bin/crud.py">
Prenom: <input type="text" name="prenom" /><br>
Nom: <input type="text" name="nom" /><br>
Numcompte: <input type="text" name="numcompte" /><br>
Code: <input type="text" name="code" /><br>
Solde:<input type="text" name="montant" /><br>
<input type="submit" name="Submit" value="Valider" />
</form>
</body>
</html>
Conclusion partielle
Python est un langage très simple.
En programmation la rigueur dans la démarche est très importante pour gagner du temps