# ★ Conférences Django pour PyCon fr

J'ai eu le privilège de présenter Django lors des journées organisées par l'afpy. C'était vraiment un weekend exceptionnel, une organisation exemplaire, des conférences de qualité, des discussions de geek, que du bon. Je me suis enfin décidé à mettre les slides en ligne, en attendant les vidéos.

## Historique

J'avais déjà présenté Django l'année dernière et j'avais vraiment eu l'impression de passer à côté de ma conf. Outre le fait que j'étais bien crevé d'avoir mis en ligne django-fr, j'ai relevé 3 gros défauts :

- je voulais que la présentation serve aussi pour les personnes souhaitant la consulter en ligne, au final c'est beaucoup trop verbeux et le code distrait à mon avis l'auditoire qui vient à une conférence pour s'enrichir d'une expérience et non pour une lecture de code ;
- je voulais faire plaisir à tout le monde en partant de la base pour aller vers des techniques plus avancées et au final personne n'y trouve vraiment son compte ;
- je voulais garder le public connecté et j'ai le sentiment d'avoir été plutôt ennuyeux : c'était long et ça manquait tout simplement de vitalité (sans compter quelques soucis avec S5).

Partant de ce constat, j'ai essayé cette année de :

- faire des slides minimaliste, l'objectif était qu'ils soient tout simplement inutiles sans moi (d'où le besoin de les enrichir pour vous les présenter maintenant, pas sûr que ce soit bon pour moi ça :p), c'est à mon avis le seul moyen de se focaliser sur l'expérience du présentateur et donc sur le message à faire passer ;
- scinder en deux sessions débutant/avancé pour laisser le choix au visiteur de n'assister qu'à la conférence qui l'intéresse ;
- trouver un moyen de rendre les confs plus vivantes (et utiliser Keynote).

Alors pari réussi ? Mon retour personnel après chaque conférence ci-dessous. J'essaye de retrouver ce que j'ai dit de tête, ça sera forcément différent des vidéos qui devraient arriver plus tard : moins de stress, davantage de temps pour étoffer et des liens en bonus.

## Pourquoi Django ?

Je n'ai jamais eu de cours de marketing et je hais les commerciaux donc c'est vraiment une épreuve pour moi de « vendre mon produit ». J'ai surtout voulu aller à l'essentiel pour pouvoir ensuite en débattre pendant les questions/réponses.

Avant de parler de Django, il est bon de rappeler les intérêts d'un framework web face à l'approche plus traditionnelle par applications fonctionnelles toutes prêtes. Qu'est-ce qui a pu suscité un tel engouement ?

On connaît tous des projets qui commencent avec un projet tout simple (je prends souvent l'exemple du blog car il est assez parlant). Il existe des trillions de moteurs de blog et il est donc aisé d'en prendre un tout fait :

Mais bien (trop) souvent, un projet évolue en cours de route et l'ajout de fonctionnalités (galerie de photos, paiement en ligne, inclusion de vidéos) aboutit finalement à un cahier des charges ressemblant plutôt à :

Si vous êtes parti d'un simple moteur de blog rafistolé, il est très probable que vous arriviez à un résultat de piètre qualité :

La solution est de partir d'une approche plus bas niveau : la caisse à outil qui va vous permettre de construire vos propres briques fonctionnelles et de réaliser un projet de manière cohérente et évolutive.

De cette façon, vous allez énormément gagner en agilité, la clé de voûte de la qualité (du projet), de la sérénité (du développeur) et de la satisfaction (du client).

Maintenant que vous êtes convaincu du bien fondé des frameworks web, il est temps de passer au plat de résistance : pourquoi Django ?

Django est écrit en Python et vous permet d'écrire du Python, il n'y a pas de fichiers de configuration en xml (ai-je besoin de rappeler que ce format est fait pour les machines ?).

Django est très facile à prendre en main, il suffit de quelques heures (même sans connaître initialement Python) pour avoir une première application qui tourne et en comprendre les principaux concepts.

Face aux deux approches : framework glue vs. réinvention de la roue, Django a choisi la seconde ce qui apporte une cohérence à tous les niveaux (documentation, code, aide, etc) au détriment de sa modularité intrinsèque.

La documentation est un réel atout, surtout lorsqu'on débute. C'est l'une des meilleures documentation technique que je connaisse et elle est en train d'être encore améliorée !

Je suis assez mal placé pour parler de rapidité de développement avec la refonte de ce blog qui a pris... du temps. Néanmoins, pour l'utiliser quotidiennement, je peux affirmer que le développement avec ce framework permet de concrétiser plus rapidement des projets. L'un des atouts est par exemple de prototyper des applications en des temps records, après bien sûr les détails prennent plus de temps, comme partout.

L'interface d'administration auto-générée est vraiment utile et participe à l'« effet Wow !© » initial. Difficile de s'en priver ensuite.

L'échappement des caractères html par défaut peut être un élément important pour une personne débutant en développement web. Ce choix est une réelle sécurité si vous ne maîtrisez pas vraiment toutes les failles possibles d'un code (même s'il serait bon de vous renseigner à ce sujet si c'est le cas !).

Django est simple, autant dans ses concepts que dans leurs mises en application, si vous connaissez Python, vous pouvez même sans peine plonger dans le code de Django et découvrir quelques pépites.

La maturité est souvent un facteur décisif d'un point de vue professionnel, après 5 ans de développement, le framework est devenu stable et à énormément gagné de son ouverture en Open-Source (pour ceux qui se demandent ce qu'une litière pour chat vient faire ici, c'est un jardin zen, j'ai pas trouvé mieux).

Quelques chiffres issus de la présentation de l'année précédente, on voit bien la progression en terme d'utilisateurs et donc de contributeurs potentiels.

Enfin, l'avantage d'avoir des outils à sa disposition est de pouvoir laisser s'exprimer sa créativité, le plus important est ce que l'on fait avec ses outils. Vous pouvez prendre le meilleur des frameworks, ça ne vous assurera pas une application à succès. Ça serait bien trop facile sinon ;-).

Après avoir vanté autant de qualités, voyons pour quels projets cette caisse à outils s'applique.

Il n'y a pas d'outil miracle, notre métier est un éternel compromis et il faut savoir faire avec. L'avantage de Django est qu'il permet de couvrir un très large périmètre d'applications mais si vous voulez construire un gratte-ciel il va peut-être falloir penser à autre chose.

Cela dit, il y a un très faible pourcentage de projets web qui doivent en arriver là et il sera toujours temps de changer certaines parties ou d'améliorer les performances le moment venu.

On termine avec un peu de teasing...

On ne l'attend plus mais Django 1.0 arrive ! (si si, je vous assure) La première branche importante (queryset-refactor) a été mergée au trunk.

Et la suivante (newforms-admin) est en cours de finitions actives. Ce n'est plus qu'une question de ... (mettez ce qui vous semble le plus crédible et votez sur whendjangowillreleaseonepointzero.com).

Des fois que le message n'ait pas été assez clair (j'adore les photos de gens qui sautent dans les présentations, je trouve ça kitsch au possible ;-)).

### Bilan personnel

Difficile d'enchaîner une nuit trop alcoolisée courte (il faut croire que c'est une malédiction) et d'insuffler suffisamment de vitalité. Je suis néanmoins assez satisfait car je pense avoir bien fait passer le message qui était tout simple : essayez Django !

L'exemple initial était assez fort pour capter directement l'attention, la liste des avantages était assez claire. Bon par contre je suis conscient qu'il y a du progrès à faire au niveau de la conclusion car je n'ai pas assez insisté à l'oral sur l'intérêt d'avoir une simple caisse à outils pour laisser s'exprimer sa créativité et je voulais insister là-dessus.

Je me suis permis quelques trolls un peu douteux sur Zope 3 (un peu la chance d'avoir assisté à la conf dessus la veille, un peu car on en a parlé une bonne partie de la nuit), je suis pas vraiment sûr que ça avait sa place. Quoi qu'il en soit, les éléments de comparaison cités dans la discussion qui a suivie étaient intéressants.

## Django : performances et qualité

J'ai eu beaucoup plus de mal à préparer cette présentation car elle était très dépendante du public. Je voulais éviter de ne m'adresser qu'à une poignée de personnes et j'ai donc choisi au final une approche plus généraliste sur les bonnes pratiques web, appliquées à Django.

Un rapide sondage m'a montré que ce choix était pertinent et que me craintes étaient fondées. Moins d'un quart de la salle avait déjà essayé Django, et une poignée sur de gros projets. Adaptation à chaud : il valait mieux passer du temps sur les aspects pas trop pointus... quitte à décevoir ceux qui étaient venus pour l'intitulé de la conf !

Un rappel préalable sur le coût de la qualité et des performances s'impose. C'est un investissement dans une logique qui s'inscrit dans la durée, ce n'est pas forcément adapté à tous les projets et ça doit être mis en place d'un commun accord entre les acteurs du projet (les tests sont très difficiles à facturer).

Un titre qui claque, je suis sûr qu'en anglais ça rend encore mieux.

Il existe de nombreux outils de détection, du simple module logging à ceux permettant de stresser votre application et votre architecture.

Avant d'optimiser, il faut bien évaluer la situation, il ne sert à rien d'optimiser un site qui ne rencontre pas de problèmes de performances, privilégiez plutôt l'expérience utilisateur (ergonomie, etc). Si vous n'avez pas le temps d'optimiser, vous pouvez toujours avoir une expansion horizontale dans un premier temps (plus de serveurs) si vous disposez des fonds nécessaires. J'ai oublié de parler de l'évolution vers les clouds pour gérer ce type de problématiques.

On entre dans le vif du sujet.

Le cache est l'élément le plus simple à mettre en œuvre et il existe différents niveaux avec Django (page, fragment, vue, queryset, etc) qui permettent d'avoir la modularité nécessaire. Attention, il ne faut pas oublier d'avoir des mécanismes d'invalidation du cache ! (pas comme sur ce blog par exemple...)

Le cache est bien pratique mais insuffisant parfois. Lorsqu'on arrive sur des gros projets, il est quasi illusoire de vouloir s'en tenir à des données normalisées. Ne serait-ce que pour le nombre d'items, il faut avoir recours à des champs dénormalisés. Django dispose de signals pour gérer ça de façon automatisée.

De nombreuses choses peuvent être faites en asynchrone (envoi de mail, préchargements de widget coûteux, etc), AJAX peut ici prendre tout son sens.

Il faut bien faire la différence entre ce qui est imputable à Django et ce qui concerne l'architecture de votre projet, un bon admin sys et/ou DBA peut faire des miracles. Il ne faut pas oublier non plus que les performances css/js jouent un rôle important à ce niveau...

Une petite astuce propre à Django, l'utilisation du tag {% with %} pour créer des alias dans les templates lorsqu'une méthode coûteuse est évaluée dans une boucle par exemple.

Le traitement des performances se fait de manière itérative, essayez de toujours identifier le facteur limitant de la réactivité de votre application.

Un résultat est important, que ce soit un échec ou pas (le scientifique reprend le dessus), pensez à documenter vos essais, que ce soit pour votre équipe ou de manière publique (blog, djangosnippets, etc).

Un autre titre jemelapètegrave.

La pérennité d'une application web est toute relative, l'évolution technologique est telle qu'il est difficile d'être pertinent à plus de 3 ans. Ça veut dire qu'il faut quand même rester évolutif jusque là !

Les règles qui s'appliquent ici sont les mêmes que pour un projet Python, il est impératif de tester les différentes fonctionnalités grâce aux unittests et doctests. Django dispose d'un module entier consacré à ça, il est temps de s'en servir. Un client spécifique aux tests permet même de tester les différentes vues et le résultats des appels (GET, POST, etc).

En découplant les différentes applications de votre projet (lire à ce sujet l'excellent post de James Bennett), vous allez pouvoir vous constituer (ou récupérer) un bibliothèque d'applications web réutilisables dans plusieurs de vos projets.

On ne mentionnera jamais assez à quel point la documentation d'un projet est importante. Normalement les doctests doivent permettre de « raconter une histoire », développez vos talents d'écrivain !

Cerise sur le gâteau, Django vous permet de générer automatiquement la documentation à partir du code dans l'interface d'administration, ce qui s'avère très pratique si vous travaillez avec une équipe de plusieurs personnes dont certaines s'occupent exclusivement du html/css/js.

Exemple d'itération sur l'implémentation des URL.

Utilisation assez naïve avec la construction d'URL à la main, c'est une mauvaise pratique car vous devez modifier les URL à de nombreux endroits si vous décidez de changer votre schéma.

La seconde méthode s'appuie sur une méthode du modèle (différente ici du bien connu get_absolute_url car on veut accéder au profil et non à l'utilisateur), c'est déjà mieux mais il faut encore modifier l'URL à deux endroits en cas de modification.

Enfin la bonne méthode est d'utiliser les URL nommées, qui permettent de ne dupliquer la création des URL à aucun endroit, si vous modifiez celle dans urls.py ça va impacter sur l'ensemble des URL de votre site. Cela est permis grâce au décorateur permalink.

Ces différentes pratiques vous permettent d'opérer des refactoring important de code tout en étant serein et de vous concentrer sur d'autres fonctionnalités.

Je voulais terminer sur un point qui me semble capital pour améliorer la qualité d'une application (pas forcément Django).

L'idée m'est venue en consultant la présentation de Cameron Moll et plus spécifiquement le slide comparant le bon designer au super designer.

J'en suis arrivé à la conclusion qu'un bon développeur est consciencieux, il connaît ses outils et sait parfaitement obtenir un résultat satisfaisant avec. Qu'est-ce qu'il lui manque alors ?

Bien souvent la curiosité, celle de fureter pour finalement trouver une solution plus adaptée ou un module qui fait déjà ce qu'il a mis une semaine à coder, celle d'aller à des conférences, de lire des livres, d'essayer de comprendre pourquoi certaines choses ont été faites ainsi. Cette qualité vous permet de vous épanouir quotidiennement dans votre travail.

Bon avec tous ces conseils, vous allez forcément faire une appli qui va conquérir le monde, faire chuter l'action Google et sauver la planète.

Les crédits, merci ! (complètement illisibles, il faut que je trouve un moyen simple de formater ça)

### Bilan personnel

Je suis beaucoup moins satisfait de ma seconde prestation, j'ai remis en question chaque concept présenté au fur et à mesure, doutant de l'intérêt pour quelqu'un s'intéressant peu à Django. Du coup j'étais un peu hésitant et je pense que ça s'est ressenti.

Au final, j'ai un peu le sentiment que ceux qui connaissaient pas trop ces problématiques se sont ennuyés et ceux qui y étaient confrontés aussi car je ne suis pas allé assez loin...

Concernant Keynote (ça vaut pour les deux confs) : aucun problème au niveau des images, par contre je n'ai pas pris le temps de configurer l'écran pour voir le slide suivant + le temps sur l'écran et c'était un tort car ça aide beaucoup.

## Conclusion

Il y a probablement des formats plus appropriés pour aborder les problématiques de performances/qualités comme des tables rondes ou des séances de questions/réponses comme me le suggérait Fabien par mail. Pour montrer la rapidité de développement de Django et donner envie d'essayer, rien ne vaut un atelier avec un petit projet de mise en bouche. Autant de pistes qu'il faudra explorer lors des journées 2009 !

### Vous y étiez ?

Votre avis m'intéresse énormément. J'aimerais vraiment pouvoir progresser à ce niveau et vous êtes le mieux placé pour m'aider. J'ai déjà eu des retours par blog (merci Sunny), par email et sur irc mais si vous avez un peu de temps, n'hésitez pas, je prends le bon mais aussi et surtout le mauvais. N'ayez pas peur d'y aller trop fort, j'encaisse derrière :-).

[Edit] : les vidéos sont en ligne ! Merci l'AFPy.

### Articles peut-être en rapport

- ★ L'élitisme de la curiosité
- Sortie de Django 1.0, une année de nouveautés
- ★ Astuces et bonnes pratiques Django

### Commentaires

Neovov le 21/05/2008 :

Ça donne envie ! Dommage que j'ai raté tes présentations.

kib2 le 21/05/2008 :

Merci David :)

Tiens, cadeau : http://www.gitcasts.com/

Xavier le 21/05/2008 :

A mourir de rire ! Mention spéciale au slide "accessibilité" !

kib2 le 21/05/2008 :

J'adore la citation de Jean-Claude VanDamme, les belges ont beaucoup à nous apprendre :)

Olivier Mansour le 21/05/2008 :

Bonjour,

Juste un truc, tu ne trouves aucun défaut à Django, ce que la plupart des décideurs trouve excessivement louche. Ils assimilent, avec raison, ce discours à un discours commercial peu objectif.

Pour les prochains couts, je te conseilles de faire un slide sur les autres opportunités que Django et en quoi Django est plus approprié sur tel ou tel projet.

Olivier

Louevie le 21/05/2008 :

Bonjour,

Je suis actuellement avec intérêt votre site. J'ai également visité le site de Django suite à cet article et j'ai réalisé que vous faisiez partie des 4 "contributeurs". Qu'est que cela signifie exactement? C'est vous qui développez les outils Django ou vous en faites "simplement" la promotion et l'utiliser?

Louevie le 21/05/2008 :

Désolée... En fait, je viens de voir qu'il y avait le site d'origine en anglais. Vous participez donc à celui en français, c'est bien cela?

NiCoS le 22/05/2008 :

@Olivier Mansour : pour le moment, la seule limitation que j'ai trouvé à Django dans mes petits projets, c'est là structure conditionnelle au niveau des templates qui se limite à "if ... then ... else ...". On peut pas faire des "if ... elif ... elif ... elif ... else". Cela reste néanmoins contournable en utilisant le moteur de template Jinja (très proche de celui de Django) et en modifiant quelques paramètres au niveau de la vue.*

L'autre limitation vient peut être du manque de souplesse au niveau de l'inteface d'admin mais l'intégration de newforms-admin devrait régler ce point et permettre de pouvoir monter aisément ses propres back-office. Mais bon, je n'ai pas encore été confronté à ce problème pour en parler véritablement.

syntax_error le 22/05/2008 :

"J'avais déjà présenté Django l'année dernière et j'avais vraiment eu l'impression de passer à côté de ma conf."

Du tout: j'ai assisté à ta conf l'année dernière (pas cette année malheureusement) et ca m'a fait découvrir le framework. Ca et les discutes qui s'en sont suivies lors de l'afpyro du soir m'ont convaincu d'essayer, et depuis je suis fan!

David, biologeek le 22/05/2008 :

@Neovov : il y a une séance de rattrapage avec les vidéos ;-).

@kib2 : de rien, je l'ai fait tout spécialement pour toi (ton commentaire m'avait bien motivé).

@Xavier : c'est au moins ça !

@Olivier Mansourt : quels défauts ? :-)

Bon ok, tu as tout à fait raison. Si je devais citer quelques inconvénients, je rejoins NiCoS sur le manque de "flexibilité" du framework lorsque tu veux utiliser d'autres composants. C'est possible mais pas trivial.

Il y aussi le problème de ne pas (encore) avoir les responders découplés des collections comme le fait restapi (dont j'ai parlé précédemment) mais je bosse là-dessus activement.

@Louevie : concernant django-fr, il s'agit de la promotion du framework et de support francophone, après j'essaye d'aider à mon échelle en soumettant des patchs ou des idées pour améliorer le framework.

@syntax_error : cool ! Ah qu'est-ce qu'on ferait pas sans les afpyros :-)

Gwen le 23/05/2008 :

Salut David,

franchement, tes confs étaient de loin les meilleurs !

Globalement, on sent bien que tu maitrises ton sujet à 200%, mais ce n'est pas là que tu fais la différence, car d'autres conférenciers étaient dans ce même cas.

Là où tu as surpassé les autres, c'est dans la forme. Tes slides étaient très bien préparées et surtout contenaient le strict minimum "à la Steve Jobs ;)". Pour moi, un bon orateur est accompagné par ses slides et non pas l'inverse.

Maintenant, si tu veux progresser voici quelques pistes:
- évite d'avoir le même ton tout au long du discours
- pose le micro sur ton menton (ou un micro cravate)
- soit plus posé sur scène, là c'est peut être dû aux abus de la veille ;)

Julien le 26/05/2008 :

J'abonderai dans le sens d'Olivier. C'est un peu Alice au pays des merveilles d'autant que tes diapos sont minimalistes et font plus marketing que techniques.
Personnellement cela me fait plus penser à une présentation d'étudiant qu'à une présentation de professionnel. Je n'ai toutefois pas assisté à ta présentation alors je ne sais pas si tu étais + pro dans le discours.
En tout cas si les diapo doivent accompagner l'orateur elles doivent aussi porter le message ce qui permet à ceux qui n'écoute que d'une oreille de lire, et donc suivre, le topo.

David, biologeek le 27/05/2008 :

@Gwen : <ému>merci</ému>, concernant les pistes, ça rejoint celles que je me suis fait (et dont j'ai fait part à l'afpy concernant le micro).

@Julien : pour moi une conf technique ça n'existe pas, un atelier oui s'il reste en comité restreint, mais dès qu'il y a une centaine de personne dans la salle tu es sûr d'en perdre la moitié en cours de route.

Ce que je trouve important lorsque je vais à une conf c'est le point de vue de l'orateur, son expérience face à une certaine situation/techno. Après pour la technique pure, rien ne remplacera la doc ou une formation.

Enfin concernant ceux qui ne suivent que d'un œil, je comprends très bien que l'on puisse ne pas apprécier Django, mais c'est un peu le prix à payer dans ce cas, si on veut un résumé de Django à coup de listes il y a d'autres lieux où le trouver, c'était pas mon objectif (c'était même presque un contre-objectif).

cambuntu le 23/08/2008 :

Bonjour, grace a vous j'ai pu installer django sur mon ubuntu, j'ai télécharger la paquet sur http://package.ubuntu.com et sa marche je fait joujoute avec cela fait un bon bout.
Svp comment puis jel'utiliser conjointement avec Yahoo UI library ou d'autre framework css et javascript car je voudrais une interface public aussi reactive que mon interface d'administration. J'ai aussi besoin de quelques informations pour une utilisation avancé des newsforms et de l'extensions de mon interface d'administration
Excusez moi pour autant de question vous êtes ma reference francophone sur django Merci

David, biologeek le 23/08/2008 :

Django permet une utilisation de n'importe quel framework frontend mais ne propose pas de helpers spécifiques par défaut.

Concernant les css, il suffit généralement de lier un fichier donc c'est loin d'être problématique.

Pour le JavaScript, c'est plus délicat mais c'est le prix à payer pour avoir la liberté d'utiliser le framework que l'on préfère. Cela dit c'est loin d'être handicapant, il s'agit généralement d'appliquer les bonnes classes aux formulaires si on pratique du js non intrusif et propre.

J'ai pas vraiment de conseils là-dessus, si ce n'est de bien comprendre comment fonctionnent les forms (anciennement newforms) Django pour pouvoir facilement les adapter.

Bon courage, ne pas hésiter à poser ses questions sur la liste de diffusion ou sur irc (cf http://django-fr.org)

Jean-Pierre le 26/09/2008 :

Bonjour à tous,
Comme je l'ai déjà signalé, je serai plutôt de l'autre coté de la barrière (décideur business) et je suis très tenté de lancer mes prochains projets en Django.
Mon plus gros problème est de trouver des sociétés de développement qui le font (j'en ai une en Allemagne) mais j'aimerai beaucoup avoir d'autre agence web/société de développement qui utilise ce framework, où que ce soit en Europe, juste par sécurité. (et c'est peut être ce qui manque dans ta présentation David: une liste de companies qui utilise le framework).

Merci de m'aider les gars !

Kedare le 17/11/2008 :

Simple curiosité, tu a utilisé quoi pour faire tes slides ? je le trouve très bien fait :)

David, biologeek le 17/11/2008 :

@Jean-Pierre : quelques pistes dans ce billet :
https://larlet.fr/david/biologeek/archives/20080927-qui-propose-du-django-en-france/

@Kedare : la réponse est dans le billet : Keynote.