Django mieux qu’un CMS ?
J’ai du récemment réécrire un site web que je gère pour une très petite entreprise : Le fil à soi. Cette entreprise comprend 3 animatrices qui proposent des ateliers et stages de massage chinois, qi gong et Gestalt-thérapie à Bordeaux. Les spécifications du site sont assez simples :
- présentation du lieu, des animatrices et informations de contact ;
- pages pour chaque atelier et stage classées en catégories ;
- gestion automatique des dates de stages et génération d’un flux RSS ;
- une interface d’administration simple pour modifier les infos sur les ateliers et stages (qui devrait être utilisée par les animatrices, même si en réalité elles ne sont pas fans d’informatique et préfèrent m’envoyer un mail…).
La version que je voulais remplacer était un site web fait à la main en PHP à partir de rien. Je l’avais commencée il y a des années avant de savoir grand chose sur la conception de sites web. Elle était donc devenue plutot difficile à gérer. Je voulais une version plus propre pour pouvoir laisser quelqu’un d’autre maintenir ce site.
Utiliser un CMS : Drupal ou WordPress
Un CMS (Content Management System : système de gestion de contenu)est une plateforme qui simplifie la création d’un site web. WordPress a été créé pour faire des blogs, mais il existe plein d’extensions qui permettent de créer n’importe quel type de site web. Drupal a vraiment été prévu pour créer n’importe quel type de site web. Il possède aussi de nombreuses extensions qui pourvoient à tous types de besoins (calendrier, magasin en ligne…)
La force de ces CMSs est qu’il gèrent les deux parties du site web : la partie utilisateurs et la partie administration. L’administration donne aux responsables du site de nombreux moyens de personnaliser et de surveiller la partie utilisateurs.
J’ai donc commencé deux petits prototypes utilisant chaque CMS et j’en suis venu à la même conclusion : aucun des deux ne répond parfaitement à mes besoins, pourtant très simples.
Par exemple pour la gestion des dates de stages : des tas d’extensions font des choses très proches de ce que je veux, mais aucun ne le fait tout à fait. Il va donc falloir que je personnalise une extension, dont le code n’est probablement pas vraiment documenté. Ensuite cette extension sera mise à jour (à nouveau sans documentation) par son auteur, et je devrais maintenir mes modifications…
Même chose pour le thème : de nombreux thèmes sont disponibles mais il ne serait pas sérieux d’utiliser un design tout fait sans l’adapter.
Je peux donc faire mon petit site web avec un CMS mais :
- le résultat sera énorme, avec plein de fonctionnalités dont je ne me servirai pas (pas besoin de blog, de gestion des utilisateurs…) ;
- il sera difficile à maintenir, et il faudra que je surveille toutes les mises à jour des extensions que j’aurai modifiées ;
- je devrai faire des mises à jour régulières quand le CMS sera mis à jour, car les failles de sécurité connues des grands CMSs sont très rapidement utilisées par des « pirates ».
Ça fait beaucoup de travail pour un tout petit site.
Utiliser Django
Django n’est pas vraiment un CMS. C’est un framework Python pour créer des sites web (comparable à PHP Zend, Ruby on Rails…). Cela veut donc dire qu’il faut écrire du code pour l’utiliser.
La grosse différence avec d’autres frameworks web est que Django a été développé à l’origine pour un site web d’actualité, la gestion du contenu était donc primordiale. C’est pourquoi un fonction très impressionnante est disponible : la génération automatique de la zone d’administration du site.
J’ai juste eu à définir mes modèles (ce qu’est un stage, une animatrice, une date de stage, une catégorie…). C’était ensuite lié à ma base de données et la partie administration était générée. J’ai enfin défini mes vues, c’est à dire la façon dont ces modèles sont affichés aux utilisateurs (avec des outils simples pour générer des flux RSS, des sitemaps…)
Les avantages de cette approche sont :
- l’application finale est très petite, sans fonctions inutiles ;
- on obtient exactement ce qu’on veut : pas besoin de s’adapter aux extensions trouvées sur Internet ;
- on sait exactement ce que chaque ligne de code fait (même si on omet de documenter…) ;
- les seules mises à jour à surveiller sont celles de Python et de Django, qui sont rares et plutôt bien gérées.
Les seuls inconvénients que je vois :
- il y a beaucoup moins de gnes qui connaissent Python Django que de gens qui connaissent WordPress, il sera donc plus difficile de trouver des gens pour gérer le site (mais ils seront meilleurs :p) ;
- Python doit etre supporté par votre hébergeur. J’utilise OVH, qui ne supporte Django qu’en CGI, mais ça suffit pour un si petit site ;
- il n’y a pas d’éditeur WYSIWYG par défaut dans l’adminstration générée par Django : ça peut être un problème pour éditer des articles (ou des descriptions de stages dans mon cas). Mais il est plutôt simple d’ajouter TinyMCE qui est purement en javascript.
Conclusion
Si vous voulez créer un blog simple et complet, utilisez WordPress. Si vous voulez faire des choses compliquées comme un magasin en ligne, utilisez Drupal.
Mais si vous voulez construire un site web simple, dynamique et facile à maintenir, et si coder ne vous fait pas trop peur, utilisez Python Django. Vous obtiendrez exactement ce que vous voulez sans trop d’efforts, et le résultat sera vraiment simple à maintenir.