Python + Flask + PythonAnywhere : Partie 2 - Pourquoi Flask ?

Suite de l'article "Python + Flask + PythonAnywhere : Partie 1 - Que choisir ?"

Cette série d'articles se penche sur:
  1. L'évaluation d'un projet web basé sur le Micro FrameWork Flask écrit en Python.
  2. Préparation d'un environnement sous Windows (Python et Flask)
  3. Mise-en-ligne et configuration du projet chez l'hébergeur PythonAnywhere.com (qui fait de l'hébergement autour de Python).
De "Why Flask?" à "Pourquoi Flask?"
J'ai décidé de tester Flask suite à la lecture de l'article "Why Flask?" écrit par Butenas.
Les propos de Butenas sont pertinents... et méritent d'exister en Français. Je vais donc vous en proposer une traduction "at the best".

Tous les propos ci-dessous sont ceux de Butenas... le "je" se rapporte donc à l'auteur original.

Pourquoi Flask?
Il n'a souvent été demandé - pourquoi j'utilise Flask et pourquoi je le préfère à Django ou d'autres frameworks. J'essaye habituellement d'éviter de tels discussions parce que soutenir un framework spécifique ou, d'une façon plus générale, un langage particulier est simplement une perte de temps.
Tout le monde à des gout et des besoins différents, chaque tâche est différente et tout ce qui peut être bon pour une tâche donnée peut être totalement inadéquat pour une autre tâche.
Dans ce billet j'ai juste l'envie de vous dire pourquoi j'ai choisi Flask et ce que j'aime le plus dans Flask. Plus tard, si quelqu'un me pose la même question, j'aurais un lien à partager :)

Qu'est-ce que Flask?
"Flask est un micro framework pour Python basé sur Werkzeug, Jinja 2 et de bonnes intentions. Et avant que vous ne posiez la question: c'est sous licence BSD!"
Donc, ce micro framework pour développement WEB est écrit en Python. Puisque c'est un micro framework, vous ne recevez pas trop de trucs lorsque vous l'installez mais il amène néanmoins les éléments suivants: un moteur de "template" (des modèles ou gabarit), un dispatching pour requêtes RESTful, l'intégration d'un serveur de développement et ce que j'aime le plus - de la flexibilité.
Vous n'avez pas authentification utilisateur out of the box, vous n'avez aucune interface d'administration, mais ne paniquez pas encore. Flask devient de plus en plus populaire et il y a de plus en plus d'extension disponible, de quoi ajouter les fonctionnalités que vous désirez ajouter.
Le Framework est flexible et vraiment bien conçu, il n'y a donc aucuns problème à l'étendre pour ajouter les fonctionnalités désirées. Voyez la page officiel du framework pour plus d'information.

Comment je trouve Flask
J'ai travaillé en PHP toute ma carrière de développeur WEB (et je continue encore). A un certain moment, j'ai l'envie d'essayer quelque-chose de nouveau. J'ai donc opté pour Python, essayé Django et j'ai vraiment aimé cela. Python est vraiment amusant, Django l'est aussi malgré sa longue courbe d'apprentissage. J'ai pris du plaisir à réaliser des sites Web avec eux.
Même si j'ai vraiment apprécié Django, tout au fond de moi sommeil un minimaliste et je suis constamment à la recherche de quelque-chose de plus petit, plus léger, plus flexible avec lequel je peux travailler.
Tandis que les frameworks Web complet (tels que Django) intègrent déjà tous les éléments dans leur coeur, ils vous contraignent également à réaliser les choses d'une et une seule façon (celle qui est correcte pour le Framework). Je voulais avoir plus de liberté et j'ai donc commencer à m'intéresser aux micro-frameworks. J'ai eu de la chance car, à cette période, Flask devenait plus populaire. J'ai donc opté pour Flask à la place de Bottle (un autre microframework), juste parce que Flask semblait plus amusant et parce qu'il était également très bien documenté.

Ce que j'aime le plus dans Flask
Minimalisme et simplicité: Flask est très petit (environ 2000 lignes de code) et la courbe d'apprentissage est pour entamer le développement d'une application est très courte. Pas de restrictions et la liberté totale d'implémenter ce que vous voulez comme vous le voulez (bien ou mal, cela de dépend vraiment que de vous... totalement).

Pas ORM et pas de couche d'accès DB: personnellement, je n'apprécie pas beaucoup les ORMs qui apportent une complexité supplémentaire dans le développement. Oui, il y a pas mal de monde pour défendre l'opposé cette opinons (vous pourriez être l'un de ceux là), mais je préfère écrire des requêtes SQL pour gérer mes données.
Si vous désirez néanmoins utiliser un ORM tel que SQLAlchemy et bien, sachez qu'il n'y aucun problème pour l'utiliser avec Flask.

Structure de l'application et le routage: la structure de l'application dépend vraiment de vous, il y a uniquement que quelques spécifications prédéfinie mais il est facile de les surmonter (détourner) si vous le voulez. Le système de routage (dit "routing") est sympa, je préfère l'utilisation des décorateurs pour définir les routes (comprenez l'association entre les URL et les fonctions à éxécuter).

Blueprints (plans) et les extensions: dans Flasks, les "blueprints" sont comme des modules pour votre application. Je préfère séparer tous mes modules en blueprints, avoir des répertoires séparés pour chacun d'entre eux où je peux placer des modèles et autres éléments qui y sont associés tels que les templates, fichiers statiques (les "''statics''") s'ils sont nécessaires et désiré.
Toutes les extensions sont facile à installer et à utiliser dans votre application. Comme mentionné précédemment - Flask est très flexible.

Moteur de Template: Jinja2 est un moteur de template (''gabarit ou modèle'') vraiment surprenant et is s'intègre vraiment bien avec Flask. Simple à utiliser, suffisamment puissant et extensible. J'ai déjà écrit des filtres personnalisés (''custom filters'') pour Jinja et cela était facile à réaliser.
Vous pouvez également écrire des fonctions qui peuvent être appelées directement depuis les templates (ajoutés au contexte de l'application puis utilisés dans les templates)... c'est comme une simulation d'une des grandes fonctionnalités de Django que j'aime utiliser - les ''template tags''.

Serveur web et débogage: vous pouvez exécuter le serveur web intégré à Flask et avoir votre application fonctionner sans encombre. De surcroît, Flask est livré avec avec un chouette débogueur intégré au navigateur (il est possible d'évaluer des variables et du code). Vous pouvez également utiliser l'extension "Flask debug toolbar" et améliorer votre expérience de débogage.

Des ressources utiles pour les débutants
Il y a quelques ressources a mentionner pour ceux qui désire débuter avec Flask:
  • Il y a, bien entendu, la documentation officiel de Flask, qui est vraiment bien réalisée et vous devriez vraiment commencer par là;
  • Le Mega Tutoriel Flask - pour les débutant et qui est également une excellente ressource;
  • Le livre "Flask web development" que je n'ai pas lu personnellement mais qui devrait convenir aux débutants;
  • Et vous pouvez, bien entendu, jeter un coup d'oeil sur les tonnes de questions sur Stackoverflow et n'hésitez pas à poser vos propres question (en anglais).
Si vous utilisez ou avez utilisé Flask, n'hésitez pas à partager votre expérience et vos opinions en commentaire de cet article.
Il est toujours bien d'entendre ce que les gens pensent des mêmes outils et s'il l'on trouvé utile, détesté et de savoir pourquoi... cela peut vous ouvrir les yeux.

Tous les articles de ce tutoriel
Ce tutoriel est divisé en plusieurs parties... vous pouvez y accéder facilement grâce au liens suivants: