Salut tout le monde,
Je reviens après une petite période d’inactivité pendant lequel j’ai abandonné l’écriture de 2,3 articles en préparations (cluster mariaDB, mise en place de ramdisk, …) .
Mais je n’ai pas totalement été infructueux pendant cette période.
J’ai depuis commencé à travailler sur un nouveau projet et pour l’occasion, je me suis dit que j’allais me mettre à de nouvelles technos que je n’avais pas encore expérimentées.
Ce qui nous amène à l’article du jour orienté développeur et qui est une présentation du framework Django.
Le python c’est bon, mangez-en …
Pour ceux qui ne connaîtraient pas encore, Python est un langage de script assez simple à appréhender et d’une puissance redoutable.
Coté feature, il est permet de faire de l’orienté objet, il est multi-paradigme, multi-plateforme et force l’utilisation d’un typage fort.
Pour faire une comparaison, il se place plus ou moins comme ruby ou perl niveau fonctionnement.
Et pour le côté carte de visite, il est utilisé aussi bien par la Nasa que par Google.
Et pourquoi je vous parle de python ? Tout simplement, car django est codé en python !
Les avantages :
- Ce sont des scripts, donc des textes (.py) qui ne seront compilés que lors de l’exécution (.pyc). Cela rend tout déploiement ou modification particulièrement facile
- Un langage simple, ça parait étrange à première vu, mais il n’y a par exemple aucune accolade, tout est basé sur l’indentation du code. C’est perturbant au début, mais on y prend vite gout.
- Un langage prévu comme modulaire, libre à vous de découper vos applis en de nombreux modules réutilisables
- Cela va avec la modularité, mais une gestion des dépendances/installation avec « pip » et « easy_install » qui rend l’installation de nouvelle feature super simple et rapide
Les désavantages :
- La gestion de l’utf8 et de certaines locales
- Certains plugins par défaut perfectibles (urllib, httplib, …)
- Une gestion de la ram un peu trop aisé qui comme pour java peu surprendre lorsque le garbage collector ne fonctionne pas comme prévu
Pour résumer :
- Par rapport à php, c’est typé et bien plus rapide à l’exécution
- Par rapport à java, c’est plus simple à développer et beaucoup moins verbeux
- Par rapport à ruby … c’est une question de goût, mais je préfère nettement la syntaxe python à ruby que je trouve beaucoup plus lisible et logique
Mais python même si c’est un langage super puissant, ne reste qu’un langage de backend.
Ce n’est pas ça qui va nous faire un site web.
Django arrive au galop
Il existe plusieurs framework python (bottle, flask, …) avec chacun ses particularités, mais je vais vous parler de mon jouet du moment « Django ».
open-source de développement web qui a pour but de rendre le développement web simple et rapide.
Le projet a pour slogan « Le framework web pour les perfectionnistes sous pression »
Il a été nommé ainsi en souvenir de Django Reinhardt, le musicien de jazz.
Django est un framework tout en un. Il vient avec son orm maison, son moteur de template maison, son framework de formulaires maison, etc.
Chacun de ses outils est à la hauteur du reste : clair, facile à utiliser, suffisamment complet pour couvrir la majorité des besoins.
Dans la pratique, avec django on code manouche ?
Déjà, ce qui surprend par rapport à des framework habituels (symphony, laravel, code igniter, …) c’est la simplicité d’un projet.
Dès le départ, difficile d’être perdu vu le peu de fichiers présent.
Voici les fichiers les plus importants, avec lesquels ont peut déjà faire un site :
manage.py -> un peu à l’instar de composer, un fichier pré-généré qui permet d’avoir des commandes automatique pour son projet (update de la db, …)
projet/settings.py -> la configuration du projet
projet/urls.py -> la gestion des routes
projet/app/views.py -> les contrôleurs de votre application
projet/app/admin.py -> l’interface d’administration auto-générée en fonction de vos modèles/orm
projet/app/tests.py -> vos tests unitaires
Après il sera bien entendu possible de rajouter quelques dossiers à votre application (templates, static, …), mais ça reste simple.
Cela rend la relecture et la compréhension d’un projet assez rapide, même quand on y a jamais touché auparavant.
Tout s’organise en site et modules afin d’encourager la réutilisation du code.
Des applications centrées sur les modèles
Django vous fournit tous les outils nécessaires et habituels pour un CMS. Mais un point qui m’a marqué est l’utilisation des modèles.
Vous n’allez pas déclarer votre base de données ou sa structure. Le système d’orm vous va s’occuper de tout ça pour vous.
Vous déclarez seulement vos modèles, et en fonctions des paramètres que vous mettez sur les champs, django va vous générer la base de données.
Mais ce qui est fort, c’est qu’au même moment, vous déclarez d’autres propriétés comme les labels attribués aux champs. Et django va aussi vous générer les formulaires d’ajout et d’édition.
Il faudra retoucher un peu les templates des formulaires pour les rendre un peu plus esthétique, mais le fonctionnement est bestial, automatique et éprouvé.
Ici mettre en place un upload de fichier revient à déclarer un champ « FileField » sur l’un de ses modèles.
Rien qu’avec cette feature, je ne vous explique pas le temps gagner par rapport à d’autres framework.
Sans parler de validation de formulaire qui fonctionne sur le même principe est qui est quasi-automatique.
Rajoutons des modules …. Gattai
L’autre élément qui tranche drastiquement avec d’autres framework, ce sont les modules (un peu à l’instant d’un zend framework et ses centaines de classes).
Ici pas de doc interminable avec des objets les plus complexes les uns que les autres, rien de ça dans django.
Tous les modules sont du python de base et s’ajoutent via le gestionnaire de module que vous utilisez.
Pour que vous saisissiez, voici un exemple concret.
Si j’ai besoin d’un système d’authentification unifié basé sur oauth pour permettre à mes visiteurs de se logger sur mon site via facebook, tweeter, google, …
De nombreux framework le permettent, mais ici je vous préviens ça surprend la première fois.
Voici le projet github que je vais utiliser : https://github.com/pennersr/django-allauth
step 1 : pip install django-allauth
step 2 : une edition du fichier settings.py pour ajouter les INSTALLED_APPS, BACKENDS et TEMPLATE_PROCESSORS dont j’ai besoin.
step 3 : une édition du fichier urls.py pour ajouter la route qui va permettre de s’authentifier (genre /accounts)
step 4 : lancer ‘./manage.py syncdb’ pour mettre à jour la base de données et créer les tables dont on va avoir besoin
et …. bah c’est tout. Cette opération m’a pris 3~4 minutes la première fois et là on peut directement allez configurer les provider dans son interface d’admin.
Et 10 minutes après, on peut se logger sur son site avec twitter et google.
C’est puissant, rapide et ça reste simple, exactement ce dont on a besoin.
Conclusion
Cet article survole vraiment le sujet, mais cette première approche ne m’a vraiment pas déçu.
D’ailleurs, j’ai commencé un projet perso sous django dont je reparlerai surement sur le blog ultérieurement.
Django n’est pas un framework qui promet monts et merveilles, mais il fait ce qu’il dit, et il le fait bien.
Il nécessite un peu de temps pour une bonne prise en main, mais il s’avère vite un outil très puissant et permettant de construire quasiment n’importe quel site.
Son seul défaut est plus ou moins le même que rails, la difficulté de trouver des hébergeurs pour ses projets terminés.
Trackbacks