Python pour dynamiser vos sites (épisode IV - un nouvel espoir)
Par gpocentek le vendredi 25 mai 2007, 20:46 - Lien permanent
Chez Ubuntu on aime bien python, et on aime bien faire des petits scripts qui génèrent des pages web (pour des stats par exemple). Et on a même la chance de pouvoir créer des pages dynamiques avec python !
J'ai eu un peu de mal à trouver une documentation pas trop mal faite qui donne les bases de l'utilisation de mod_python de manière simple et efficace. Essayons de remédier à ça.
Notes à propos de ce document
- Mieux vaut connaître un minimum python pour le suivre ;
- pour faciliter les choses, on suppose que les fichiers créés le sont à la racine du serveur web.
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...
Il y a 3 commentaires
merci pour cettte introduction, brillante de simplicité.
dans script/étape 3, il y a toutefois lieu d''écrire, pour le paramètre action du formulaire : action="script.py/result"
Apache/mod_python reconnait comme un grand qu'il s'agit de script.py qu'il faut interpreter lorsque l'on appele /script :), grâce à
AddHandler mod_python .py
je ne veux pas polémiquer
j'avais ajouté les trois lignes dans le .htaccess du bon répertoire
pourtant, j'ai dû faire la modification citée pour avoir le résultat escompté
que mon commentaire aide d'autres qui seraient bloqués comme moi