Technologies derrière un site web à base de Django aujourd’hui

Suivez-moi aussi sur Identi.ca ou sur Twitter.

Comment concilier mon envie de développer un site web autour d’une idée originale (donc très motivante) et la partie technique associée qui me rebutait à priori, de par mon expérience du monde PHP/MySQL (qui date un peu je vous l’accorde) ?

Mon intérêt pour le langage Python m’a naturellement poussé vers le framework Django. Mais les technologies impliquées dans la réalisation d’un site web moderne sont aujourd’hui légions.

Je brosserai dans cet article un large portrait des choix techniques que j’ai faits et de la difficulté associée à leur emploi.

Technologies employées

Debian

debian-button

Système stable avec beaucoup de paquets. Personnellement j’adore 😉 Debian Squeeze avec les backports puis Wheezy aujourd’hui. Migration très simple effectuée récemment dans mon cas.

Django

django-logo

Le choix de Django vient de mon intérêt pour Python. J’ai quand même observé une adoption de plus en plus large de ce framework web pour des sites à forte audience, me réconfortant sur sa capacité de passage à l’échelle.  Le site utilise le framework Django en version 1.5. J’ai eu beaucoup de mal au début à intégrer le fonctionnement de Django, mais une fois maîtrisé ça a clairement boosté mes capacités à mettre en place ce que je voulais coder pour le site. C’est solide, cohérent, modulaire et très conforme à l’esprit du langage Python.

Apache

apache-logo

Pour la partie serveur web, je suis parti sur un Apache 2.2 + mod wsgi, principalement pour des raisons de simplicité de mise en place. J’envisagerais quelque chose de plus travaillé si le site décolle et devient plus exigeant en performances. Je pense en particulier à l’emploi de Nginx.

PostgreSQL

postgresql

Django s’interface avec plusieurs bases de données (PostgreSQL, MySQL, Oracle, SQLite). J’ai choisi PostgreSQL pour la robustesse de cette solution et sa pérennité. J’avais aussi de bonnes connaissances dans cette solution et je souhaitais l’utiliser plus largement dans un projet personnel, les fonctionnalités de la version 9.2 étant très alléchantes.

South

south-logo

J’en parle immédiatement car cette petite application a considérablement réduit la complexité du passage en production. Elle gère de manière transparente la migration des schémas et la migration des données de la base de données lorsque vous installez une nouvelle version de votre application. Concrètement, vous avez rajouté des colonnes à une table dans votre version de développement, vous avez installé la nouvelle version de développement en préproduction, maintenant vous avez deux choix : soit vous passez des ordres SQL à la main afin de rajouter les colonnes qui vous manquent sur la base de préproduction (ce qui impliquent de bien avoir identifié les éléments à rajouter) avec tous les risques que comportent ces opérations, soit vous utilisez South 🙂 qui le fait pour vous. J’ai mis un peu de temps à bien maîtriser les différentes étapes du processus de migration des données, mais la documentation est précise et c’est un vrai plaisir à lire.

Git

git-logo

Le gestionnaire de sources Git que j’utilise déjà sur plusieurs autres projets s’est imposé comme un très bon choix pour ce projet. Avec des connaissances basiques, j’en ai néanmoins fait un point très important de ma chaîne d’industrialisation particulièrement pour le développement et l’intégration du développement vers la préproduction. Voir plus bas.

Memcached

memcache-logo

Django propose de s’interfacer simplement avec Memcached, le serveur de cache qui permet de gagner du temps lorsque les données interrogées sont déjà stockées en cache. Sa prise en charge par Dhango a poussé mon choix vers l’ancêtre (ancêtre si on le compare à Redis par exemple).  A titre personnel, je serais plutôt parti sur Redis, mais je voulais rester aussi proche que possible des outils utilisés par Django. A voir dans le futur. Une chose est sûre, Memcache uned fois lancé ronronne et on en entend plus parler. Un plaisir pour l’administrateur système. Memcached s’interface très bien à Django via le module Python-memcache.

Haystack/Whoosh

haystack-logo

Un ensemble d’outils pour la fonction recherche du site. J’ai cherché des projets actifs et simple à intégrer dans Django. Elles remplissent bien leur job et n’ont pas représenté de difficultés particulières pour être mises en place.

Zinnia

zinnia-logo

Cette application Django permet de rajouter un moteur de blog adaptable à votre propre site web très facilement. J’en parlais déjà dans l’un de mes vrac de mini-messages et j’ai bien fait d’approfondir. Le projet est actif, utilisé par de nombreux sites. Ayant déjà travaillé sur son intégration à mon site, je peux confirmer que c’est bien pensé et fidèle au modèle de fonctionnement de Django. Et en plus c’est bourré de fonctionnalités intéressantes 🙂 J’ai hésité entre zinnia et externaliser le blog mais j’ai préféré intégrer le blog au sein du site pour être sûr plus tard de pouvoir augmenter au maximum les interactions entre les deux, et ce de la manière la plus transparente possible pour l’utilisateur. J’ai trouvé le temps de prise en main très court quand on comprend bien le principe de base, à savoir la surcharge systématique des fonctionnalités offertes par défaut pour les adapter à vos besoins.

jQuery

Jquery-logo

JQuery est une bibliothèque Javascript dont je me sers pour la partie bling-bling web 2.0 du site. J’en ai une utilisation très basique mais je suis très content du résultat. Etant peu motivé pour coder du Javascript, j’ai largement simplifié cette phase grâce à JQuery.

Découpage dev/préprod/prod

Dès le début du projet j’ai découpé ma chaîne d’industrialisation en trois étapes :

  • Le développement, où j’implémente les nouvelles fonctionnalités
  • La préproduction, qui récupère la version de développement, s’installe sur un vhost Apache dédié grâce à un script mise-en-preproduction.sh
  • La production, qui est une copie des données de préproduction adaptée via un script mise-en-production.sh pour un vhost Apache dédié

L’utilisation de cette chaîne d’industrialisation me permet de pousser rapidement des nouvelles versions du développement vers la préproduction où s’effectue les premiers tests et l’adaptation au contexte fonctionnels, puis de la préproduction vers la production. Mon prochain objectif est la mise au point de campagnes automatisées de tests fonctionnels, sûrement avec Selenium.

Et vous ? Que pensez-vous des technologies mentionnées dans cet article ? Des remarques sur l’industrialisation ? N’hésitez pas à réagir dans les commentaires.

31 thoughts on “Technologies derrière un site web à base de Django aujourd’hui

  1. Du grand classique pour du Django, mais c’est aussi ce qui fonctionne. Tu ne devrais pas avoir de souci.

    Après si tu veux faire le foufou tu peux toujours utiliser Django REST framework et coller un AngularJS devant, mais là on est sur de l’appli web plutôt que du site web.

    • j’allait le dire, je commence a etre tres tres interressé par angularjs, c’est vraiment bien foutu , j’adore le principe et l’esprit (ajouter a l’html ce qui lui manque) apres django, bien pour l’efficacité (meme si je suis pas connaisseur ) mais pour ma part et etant un peu dans le meme etat d’esprit (apres 10ans de php et apres 2 derniere annee de python, vraiment…..pas photo) je me laisserais plus tenter par du flask mais c’est mon coté en recherche de minimalisme et un peu peur des “gros” framework.

      • fyl : connaissant assez bien le Python, je suis obligé d’admettre que j’ai eu du mal avec Django au début (pour abonder dans ton sens de la peur des gros frameworks) mais maintenant je réalise tellement rapidement ce dont j’ai envie que je suis très content d’avoir consacré ce temps d’apprentissage.

    • G-rom : en fait le site web tourne déjà, et en effet je suis très content des technologies utilisées, c’est pour ça que je voulais parler d’elles un peu plus largement en leur consacrant un billet 🙂

  2. Pourrais-tu approfondir l’aspect serveur Web utilisé ?
    – apache + mod_python ou mod_wsgi
    – apache + python en cgi
    – nginx + python en cgi

    Je ne sais pas s’il existe un équivalent de php-fpm pour faire tourner du python.

    • GillesMo : très bonne idée, je ne sais pas pourquoi j’ai zappé cet aspect dans le billet. Je rajoute une petite section à ce sujet, merci 😉 [article mis à jour]

    • Bonjour,

      J’ai découvert Django dans une version hors-série du Linux Magazine (n° 59) qui offrait un numéro complètement dédié à Django, de l’installation à la mise en production d’une application. Si tu parviens à trouver ou à acheter ce magazine (http://www.unixgarden.com/index.php/cp/gnulinux-magazine-hs-n59-communique-de-presse) je te le conseille vivement pour débuter, ainsi que la documentation officielle (https://docs.djangoproject.com/en/1.5/).

      En plus de la documentation officielle, je te conseille de trouver un bon livre sur le sujet. En tant que développeur amateur, j’ai découvert le langage python en même temps que Django et j’ai commencé par lire des ouvrages sur Python comme le livre “Apprendre à programmer avec Python” de Gérard Swinnen (disponible gratuitement, maintenu à jour et sous licence Creative Commons à l’adresse http://inforef.be/swi/python.htm). Ensuite concernant Django je te conseille le livre “The Django Book” qui propose une version en-ligne (ici: http://www.djangobook.com/en/2.0/index.html). Je me suis également procuré les livres “The Definitive Guide to Django – web development done right” et “Practical django Projects”. Tous deux offrent des exemples pratiques intéressants même s’ils ne sont pas forcément très récents. Par exemple, Practictal django Projects te permet de découvrir le framework à travers la construction d’un CMS basique et d’un blog complet. Personnellement, j’ai suivi de nombreux tutoriels en ligne mais je trouve que les livres offrent nettement plus de précision, ce qui peut être nécessaire lorsque l’on débute dans un langage. De plus, une grande partie de ces livres sont disponiblement librement sur Internet ou des les bibliothèques.

      Pour finir, j’ai rencontré plusieurs difficultés techniques au niveau du développement de sites avec Django, mais j’ai toujours pu trouver une réponse rapidement sur le salon IRC #django-fr. En cas de problèmes n’hésite pas à y passer pour poser une question si tu es bloqué.

      En espérant que ces informations pourront t’être utiles,

      Bonne journée.

  3. Ta manière de faire est vraiment très proche de la mienne. Je viens aussi de passer vers Django après des années de PHP et j’ai l’impression de redécouvrir le développement web…

    Pour le déploiement, je passe aussi par une phase triple. J’ai 4 fichiers de configuration dans n répertoire settings : un common.py que j’importe dans les trois autre, un dev.py, un beta.py et un prod.py. Le choix du fichier à utiliser se fait dans le wsgi.py, que j’ai aussi en trois exemplaire. 9a peut paraître compliqué mais une fois mis en place, le système permet de déployer avec un rsync puisqu’il n’y a aucun changement à faire dans la config !

    Je ne connaissais pas Haystack et je vais investiguer car j’ai besoin d’un moteur de recherche !

    Je n’utilise pas Zinia car j’ai développé mes modules “moi même”. Idem pour la gestion des images.

    Pour le reste, de fait, tu utilise du classique, éprouvé et solide !

    • CédricD : oui, haystack + whoosh me fait un moteur de recherche peut-être simple pour l’instant mais qui colle à mes besoins. J’ai hésité à tout recoder moi-même pour le blog de mon site, mais quand j’ai vu Zinnia, mon âme d’informaticien qui prône de ré-utiliser ce qui existe déjà a pris le dessus 😉

      • Je comprends très bien le paradigme du “il vaut mieux réutiliser que de refaire”. C’est simplement parfois trop tentant. Ah ! La curiosité me perdra.

        • CédricD : tout dépend souvent du temps nécessaire pour aller vers l’alternative. Mais il faut aussi prendre le coût de maintenance dans le temps et la facilité d’évolution de la solution. Plein de points qui me poussent à en général quand je le peux déléguer à des projets qui ont plus de ressources que moi et qui sur le long terme feront un meilleur travail.

  4. Interessant 🙂
    Dans le même cas, qq années de PHP, puis une envie de tester Python pour mes projets web ( l’utilisant déjà pour des tâches de gestion et d’administration sys. ).

    Pour avoir tester Flask et Django, j’utilise Flask pour les projets plus léger, rapides à coder et à configurer, et Django pour mes projets qui sont pour du long terme, et bien plus important ( gestion de production full web dans mon cas ) .

    Cependant je reste un novice sous Django, la bête est effectivement relativement complexe à apprivoiser, d’autant que le documentation Francophone est relativement faible.

    Tu utilises des outils que je ne connaissais pas , merci pour ce retour .

    J’ai commencé une doc ( google Doc ) que j’alimente au fur et à mesure que j’avance dans mon utilisation de Django, pour aller à l’essentiel ( installation en virtualenv, configuration pour le dev et la prod, models, vues, authentification, signaux, formulaires, … )

    Cependant j’utilise une base de données MongoDB pour mon projet, (grâce à mongoengine intégré à Django 1.5.1 ), il n’y a donc rien dans cette doc qui parle d’une gestion de BDD type sql.

    Si cette Doc intéresse quelqu’un et souhaite même la compléter, il n’y a pas de problème ( il faudra juste que je la relise et corrige les fautes avant de la rendre publique :p )

    En tout cas merci pour ce retour, j’ai de nouvelles choses à tester maintenant 🙂

    Ch.

    • cdsl : de rien de rien c’était le but de l’article. Je suis content qu’à lire les commentaires l’article sur ce retour d’experience semble intéresser du monde.

      • Tu peux aussi ajouter comme module indispensable pour le dev sous Django, “[url=https://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CDUQFjAA&url=https%3A%2F%2Fgithub.com%2Fdjango-debug-toolbar%2Fdjango-debug-toolbar&ei=0VW0UZSGHui70QWp1YHwDw&usg=AFQjCNG0Grv-laJeK7f6Bn2QeGUaqX3YCg&sig2=xJ-eHfSOeDZPdIzRlkXFwA&bvm=bv.47534661,d.d2k]Django-debug-toolbar[/url]”

  5. J’ai cherché un truc pour le bling-bling web2.0 mais je suis tombé sur Extjs
    qui a mon avis automatise plus de choses que jQuery.
    Serais je passé a coté de qq chose ?
    L’apprentissage de ces frameworks est quand même long (pas autant que CSS+JS) et il est difficile de ce faire un avis.
    Commetn as tu trouvé jQuery (par hasard, plus utilisé etc …)

Laisser un commentaire

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