Comme vous le savez sûrement WordPress c’est sympa, c’est convivial, relativement modulaire, agréable pour le gestionnaire de contenus, ça fait de belles urls bien proprettes … oui mais voilà un geek sur wordpresss, au bout d’un an, il s’emmerde … il a en a surtout raz la casquette de devoir mettre à jour 20 pluggin tous les mois. Du coup il se demande s’il ne va pas en virer ou faire un métabundle …; mais non c’est idiot, trop de temps pour un résultat sûrement pas sexy qui posera par la suite des problèmes de maintenabilité.
Ma problématique du jour est la suivante : j’ai besoin d’un truc assez passa partout qui me permettrait de faire fonctionner plusieurs petites appli très simples, blog, moteur digg like… sur des urls en sous domaine, rien de sorcier. mais là tout de suite, on voit bien que
Worpdpress + pligg face à Django tout seul qui sait tout faire, … on prend donc Django. Ruby on Rails aurait lui aussi pu convenir, mais c’est Python qui nous intéresse 😉
Ce qui m’amène au jouet du jour : Django
Django est un framework reposant sur le langage objet Python, Django est un outil à destination des développeurs.
On va commencer par faire nos premiers pas avec lui
Petite install de Django, on va utiliser la méthode svn plus à même de garantir une maintenabilité parfaite.
$ svn co http://code.djangoproject.com/svn/django/trunk/ django
En fonction des OS, des versions des OS, il va falloir localiser votre installation, sur Linux, python est souvent dans le /usr/lib; mais si ce n’est pas là pas de panique
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
ce qui me renvoi pour mon os :
/usr/lib/python2.5/site-packages
C’est parfait je sais où se trouve mon install de Django
$ cd /usr/lib/python2.5/site-packages && ls
Django-0.97_pre-py2.5.egg-info README django
Comme je veux avoir vite un truc en production, je suis les bons conseils distillés sur le site de Django et j’installe le mod-python,
$ sudo apt-get install libapache2-mod-python
Il faut maintenant s’assurer que les pages .py s’affichent correctement et pour ça il va déjà falloir modifier le fichier de copnf default de notre apache2
$ cd /etc/apache2/sites-available/
$ emacs default
A la 10e ligne on trouve ceci :
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
# Uncomment this directive is you want to see apache2's
# default start page (in /apache2-default) when you go to /
#RedirectMatch ^/$ /apache2-default/
</Directory>
On va le transformer en ça :
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride AuthConfig
Order allow,deny
allow from all
AddHandler mod_python .py
PythonHandler mod_python.publisher
PythonDebug On
# Uncomment this directive is you want to see apache2's
# default start page (in /apache2-default) when you go to /
#RedirectMatch ^/$ /apache2-default/
</Directory>
c’était histoire de déclarer ici que notre Apache est beau, que notre Apache, est puissant que notre Apache comprend maintenant Python ! … d’ailleurs pour s’en rendre compte on va tester ça en créant un petit fichier de test, intelligemment appelé test.py
$ sudo emacs /var/www/test.py
on y colle ceci :
def index(req):
return "Yeaaah my Apache knwows kungfu !!!";
on enregistre maintenant le tout, puis on redémarre apache
$ sudo /etc/init.d/apache2 restart
J’ouvre mon navigateur et et là top du top, mon Apache connait le kungfu …
On passe maintenant à la config de base du httpd.conf
$ sudo emacs httpd.conf
on va y placer ceci
<Location "/monsite/">
SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE monsite.settings
PythonDebug On
</Location>
Notez que le debug est sur « on » pour le moment.
On va maintenant s’installer notre petite base de données, on va ici choisir du MySQL5 qui aura aussi besoin de mysqldb
$ sudo apt-get install mysql-server python-mysqldb
C’est donc parti pour l’installation de notre Django , je me place dans le répertoire du trunk Django que j’ai svn checout à la première étape et je lance le script d’install :
$ sudo python setup.py install
Si tout c’est bien passé je dois avoir quelque choses comme ceci qui m’indique où l’egg se trouve
running install_egg_info
Writing /usr/lib/python2.5/site-packages/Django-0.97_pre.egg-info
Il ne reste plus maintenant que les confs post installation à se farcir, elles sont très bien documentées sur le site de support :