migration mod_python

April 29, 2006 on 3:00 pm | In General, Linux, Python, admin | 8 Comments

mod_python est un module pour le serveur Apache qui permet d’utiliser directement du Python pour créer ses applis web. Cela apporte de nombreux avantages : la code est portable (relativement), le propotypage rapide, et on peut avoir accès à tout bibliothèque Python. Les inconvenients sont la sécurité : il faut veiller à bien encadrer son application.

J’ai décidé de migrer une de mes applis de Python/IIS vers mod_python/Apache2. C’est une appli encore assez simple, toujours en beta mais qui utilise toutes les fonctionnalités d’un serveur web : Environnement, Session, Cookies… De plus, je voulais n’utiliser que la librairie standard de mod_python; pas de modules complémentaires ni de frameworks web. A priori, tout cela est géré par mod_python (à partir de la v.3.1.3) donc : c’est parti !

La doc de mod_python etant assez limitée, je vais faire un petit résumé de ce que j’ai trouvé…

Déjà , il y a plusieurs facons d’utiliser mod_python : le mode standard, le mode Publisher, le mode PSP, ou encore le mode CGI.

ces 4 possibilités ont un impact au niveau des performances : cf comparatif perfs modpython. Et la facon de coder ne sera pas la même.

Le mode PSP permet de faire des pages .psp du style de pages PHP, avec le HTML et le code Python mixés. Pour des raisons de séparation du code et de la présentation, ce n’est pas l’idéal.

Le mode Publisher permet lui de faire quelque chose de plus pythonesque; on part d’un module python ou des fonctions répondront aux appels d’Apache, et on utilisera si besoin un système de templates HTML (classe PSP). Ce mode facilite aussi la vie du programmeur en automatisant certaines tâches (codes de retours Apache…)

J’ai opté pour la solution publisher car c’est la plus “Python Style”, la plus puissante en termes d’évolutivité, et elle est assez performante pour ce dont j’ai besoin.

Déjà , config dans Apache (je ne suis pas encore un pro de Apache) :


ServerName dev.monappli.fr
ServerAdmin contact@revolunet.com
DocumentRoot /var/www/monappli

Options FollowSymLinks
AllowOverride All
Allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher # J’utilise publisher comme handler
PythonDebug On

Exemple de .htaccess : on peut définir des variables auxquelles mod_python aura accès :

AddDefaultCharset cd1252
DirectoryIndex main.py
ErrorDocument 500 error.py
ErrorDocument 404 error.py
ExpiresDefault A1

# Options Python
PythonAutoReload On
# ici on ajoute un dossier au sys.path pour nos libs persos
PythonPath “['/var/www/monappli/lib/']+sys.path”
PythonOption SMTP smtp.free.fr
PythonOption DB_HOST 127.0.0.1
PythonOption DB_NAME monappli
PythonOption DB_USER monappli
PythonOption DB_PASS monappli
PythonOption ROOT_PATH /var/www/monappli/
PythonOption LANG fr

Exemples de page en Python :
Chaque fonction appellée par un navigateur se voit passer un argument ‘request’ (ici appellé req) qui permet d’accéder aux classes Request, Response, Session, Cookies…

# main.py :

# import d’un module
import time
# import d’un module dans notre lib (définie dans le .htaccess)
import malibrairie

# fonction appellée quand appel direct à  monappli.fr (page par defaut)
def index(req):
req.content_type = “text/html; charset=windows-1252″
return “Bienvenue sur monappli.fr !”

# fonction appellée quand appel à  monappli.fr/page1
def page1(req):
req.content_type = “text/html; charset=windows-1252″
return “Bienvenue sur la page 1 !”

#fonction privée, qu’on ne peut pas appeller depuis apache
def _private(req):
return (2*2)

Je post d’autres exemples très bientôt, stay tuned ;)

A venir : Gestion session, cookie…

8 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Waoh !!! ca promet tout ca !

    Comment by jide — 4 May 2006 #

  2. Toodo ! Une application web 2.0 pour gérer ses tâches

    Toodo ! est la prochaine application web 2.0 qui va cartonner !
    Développé par Julien Bouquillon (revolunet) et bientôt moi-même (il faut vraiment que je m’y mette), toodo permet de gérer ses tâches facilement.
    Le développement de toodo es…

    Trackback by jide.fr — 4 May 2006 #

  3. Pour ceux qui se demandent si mod_python est dispo sur l’hebergement free.fr, désolé mais c’est NON ;(

    Prenez vous une dedibox en vous associant à plusieurs si besoin ;) (30€ par mois très vite rentabilisés)

    Comment by Juju — 21 August 2006 #

  4. C’est pas :
    from time import *
    sur le dernier code plutot que :
    import time

    Comment by Noxsl — 5 May 2007 #

  5. les deux notations sont possibles, mais import time est mieux car cela evite les problemes de namespaces entre différents modules.

    + de détails sur ces deux methodes ici : http://diveintopython.adrahon.org/object_oriented_framework/importing_modules.html

    Comment by Juju — 7 May 2007 #

  6. As tu d’autres bout de codes comme promis ?

    Comment by vince — 3 July 2007 #

  7. non désolé je n’ai pas encore fait une compil de code pour mod_python… si tu as des questions precises, je pourrai peut etre t’aider….

    Comment by Juju — 4 July 2007 #

  8. Euh désolé d’intervenir si longtemps après la parution mais mod_python m’intéresse beaucoup et j’attends justement tes prochains épisodes !
    Surtout celui sur les sessions, tu n’aurais pas un exemple ? Par exemple, passer une variable par les variables de session à une autre page ? Et puis un léger comparatif sur les avantages et inconvénients des stockages en mémoire ou dans des fichiers des sessions elles-mêmes. (j’ai l’impression que ça parait pas très très clair …)

    Comment by Guizmo — 6 December 2008 #

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Powered by WordPress with Pool theme design by Borja Fernandez.
Entries and comments feeds. Valid XHTML and CSS. ^Top^