Séance 8 - CGI/Python

Séance précédente (et son corrigé), séance suivante


Contenu du TP

Au menu de cette séance, on continue les feuilles de style (CV en XHTML+CSS) et on commence à utiliser Python pour créer une base de données et communiquer avec depuis des pages web grâce à CGI.

Le principe est que quand le visiteur visite une page web (d'extension .cgi, située dans le dossier cgi-bin, qui se trouve dans public_html dans votre répertoire personnel, avec les droits rwxr-xr-x pour ces deux dossiers et le fichier) c'est en fait un programme Python qui s'exécute et affiche le contenu de la page web.

Pour afficher, il faut donc utiliser la commande print et le triple guillemet droit pour qu'elle soit "multiligne". De plus, il faut préciser que le contenu est de type page web en affichant "Content-type : text/html", qui doit être suivi d'un saut de ligne.

Voilà par exemple comment afficher une page web Hello World :
#!/usr/bin/env python
import cgi
print """Content-type: text/html

<html>
   <body>
      Hello World!
   </body>
</html>"""


Pour récupérer les clés d'un formulaire HTML, il faut utiliser la librairie cgi et la fonction cgi.FieldStorage() qui renvoie un résultat de type dictionnaire :
import cgi
params={}
for clef in cgi.FieldStorage().keys() :
   params[clef] = cgi.FieldStorage()[clef].value


L'énoncé du TP se trouve toujours ici et le cours (notamment son chapitre 5 pour le CSS).

Vous remarquez que l'on n'utilise pas le système PHP+MySql qui semble plus classique pour gérer une base de données que de faire interagir Python avec un fichier .csv (un fichier texte, avec sur chaque ligne, un élément de la base de données, dont les champs sont séparés par des point-virgules). Cela nous permettra d'éviter l'attaque "Exploit of a mom" :
La sécurisation des bases de données MySQL selon xkcd
Pour quelques bons principes (sérieux) de sécurité, allez voir cette liste des 25 erreurs de programmation les plus dangereuses.


Corrigé

Pas de corrigé pour cette séance : demandez-moi de jeter un oeil à votre solution !