Installation

Sous debian/ubuntu & cie, rien de plus simple :

sudo apt-get install libapache2-mod-python

PSP ou Publisher Handler ?

mod_python propose deux types de fonctionnement :

  • PSP – Python Server Pages – propose le même mode de fonctionnement que (par exemple) PHP. Du code python est inséré entre des balises <% et %>, pour générer une page contenant du texte HTML. Nous n'en parlerons pas ici
  • Publisher Handler propose une méthode totallement différente, et plutôt sympathique à utiliser :)

Diving in

htaccess

La première chose à faire pour utiliser le Publisher Handler est de créer un fichier .htaccess (ou d'éditer directement la configuration d'apache) afin de donner certaines directives. Ce fichier ressemblera à :

AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On

Les fichiers avec extension .py seront donc traités par apache comme des fichiers liés à mod_python. Le mode débogage n'est pas nécessaire (normalement) sur des pages en production, mais est presque indispensable pendant la phase de développement.

Script - étape 1

Créons un script script.py avec ces quelques lignes :

from mod_python import apache

def index(req):
return "<h2>hello world</h2>"

Rendez-vous sur http://localhost/script, et admirez le résultat !

La première ligne du script parle d'elle même. La fonction index est appelée lors de l'ouverture de la page web, et la chaîne de caractères qu'elle retourne est le contenu de la page. Mais dans cet exemple le texte est traité comme tel, c'est-à-dire non interprété. Pour remédier à ça, le script doit être transformé en :

Script - étape 2

from mod_python import apache

def index(req):
req.content_type = "text/html; charset=utf-8"
return "<h2>hello world</h2>"

Le texte retourné sera maintenant traité comme de l'html.

Script - étape 3

Passons à l'étape suivante avec un exemple de traitement de formulaire. Voici le code :

from mod_python import apache

def index(req):
req.content_type = "text/html; charset=utf-8"
return """<html>
<body>
<form method="post" action="script/result">
Nom: <input type="text" name="nom"><br />
Prenom: <input type="text" name="prenom"><br />
<input type="submit" value="go">
</form>
</body>
</html>
"""

def result(req):
req.content_type = "text/html; charset=utf-8"
return "Bonjour %s %s !" % (req.form['prenom'], req.form['nom'])

Comme dans l'exemple précédent, la fonction index est appelée lors de l'accès à la page http://localhost/script. Lorsque le formulaire est validé, la page script/result est appelée, qui correspond en fait à un appel à la fonction result du script script.py.

L'objet req (la requête envoyée au serveur), possède un attribut form, un dictionnaire qui contient toutes les données du formulaire validé "name" et "value"). Ceci fonctionne quelque soit la méthode d'envoi du formulaire utilisée (get ou post). Il ne reste plus qu'à traiter le formulaire comme bon vous semble et retourner la page html

Bien évidemment, tous les modules et possibilités de python sont utilisables pour dynamiser vos pages web.

Quelques liens utiles :

Au prochain (éventuel) épisode, gestion des sessions et cookies...