Premiers pas avec Django : un framework en Python pour développer rapidement et efficacement – Acte 1

test-ok.pngComme 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 …

test-ok1.png

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 :

7 réponses sur “Premiers pas avec Django : un framework en Python pour développer rapidement et efficacement – Acte 1”

  1. Et voilà, j’ai fais la connerie de tâter un peu turbogears … et merde, c’est vachement bien aussi ce bidule … et me voilà revenu à mon point de départ … je vais me laisser jusqu’à jeudi pour tâter un peu aussi Pylon avant de m’arrêter sur un framework… en fait je sais plus trop où donner de la tête tant je vois des projets matures et attractifs en framework python. En tout cas il y aura une suite à ce post c’est clair, sans rentrer dans le méga comparatif de framework python, j’aimerai être assuré d’avoir compris la philosophie et les limittes de django, turbogears et Pylon. Mes priorités sont les perfomances, la souplesse et surtout coder le moins possible vu que je suis une vraie quiche, donc si vous avez des conseils :p

  2. Yeah super, merci pour ce lien, j’avoues que je n’ai pas encore eu le temps de faire de recherches approfondies pour comparer tout ça mais après une première lecture, mon choix s’orienterait pour le moment vers Django à cause de mon niveau déplorable qui m’inciterait à tendre vers les plus user friendly

    Il me manque à tester Pylons, puis retester Django, puis retester TurboGears … essayer de faire deux trois choses simples avec…
    En tout cas Nautile merci beaucoup pour ce link. J’ai vraiment envie de découvrir d’autres choses que Zope mais toujours en python. Je vais aussi zieuter un peu Cherrypy du coup … je suis pas arrivé !

  3. Pas de pb. Comme dans l’article, je pense que le choix doit se faire en fonction du type de projet qu’on a en tête. Sachant tout de même que django sera sans doute plus souple si on a des besoins qui ne cadrent pas avec le framework, car tout, ou presque est découplable dans django. Alors que je ne suis pas sûr que ce soit autant le cas avec TG.

    Dans la série à tester, il y a aussi webpy !! 😉

    Je pense que je resterais à django en ce qui me concerne. En fait pour l’instant, j’utilise symfony, qui est un peu le RoR de PHP, mais je trouve de plus en plus PHP vraiment pénible. Je me tâte pour migrer vers RoR ou Python. Pour l’instant, je trouve django plus impressionant que RoR, mais Ruby plus agréable que Python (mais dans tous les cas, c’est mieux que PHP) !!

  4. Vous oubliez Karrigell (http://en.wikibooks.org/wiki/Karrigell_Tutorial/Home_page) qui est trèèès agréable à programmer (le plus pythonique à mon avis), que l’on peut faire fonctionner de façon autonome, ou derriere Apache, Lighttpd, Xitami, en cgi… Accompagnée de l’excellente base python Buzhug (http://buzhug.sourceforge.net/), ou encore PyDbLite ou kirbybase, MySQL et du moteur de templates cheetah (http://www.cheetahtemplate.org/)….
    A essayer aussi !
    Impressionnant de simplicité, facile à prendre en main, particulièrement bien pensé. Cerise, la doc est en français 🙂
    Une fois que l’on met le doigt dedans, il est difficile de s’arrêter 😉

  5. Bon il il a quelque chose qui m’a laissé sur les fesse, il s’agit d’une colection d’app pour django : Pinax, je sais pas si ovus connaissez, mais si ce n’est pas le cas c’est vraiment à découvrir d’urgence.

    http://pinaxproject.com/

    En fait entre RoR et python, je ne me pose plus du tout la question, c’est python (bien plus mature, plein de libs) 🙂 Et Django, maintenant en 1.0 et bénéficiant du support d’une vaste communauté de dev (merci Google) profite d’un élan vraiment bénéfique.

    Je ne connais pas webpy, je vais y jeter un oeil

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.