Accueil

Traduction

Tutoriel Python - sommaire

Tutoriel Python - recherche

L'auteur : Patrick Darcheville

Vous pouvez me contacter via Facebook pour questions & suggestions : Page Facebook relative à mon site

Un site web avec Flask

Dans ce chapître je vais vous montrer comment réaliser un micro site web avec le framework Flask.
J'emploie l'expression "site web" et non pas "application web" car il n'y a pas de base de données connectée, donc les pages sont statiques.

Objet du site

Ce site porte sur la biologie marine. Il s'agit d'un tutoriel sur l'embranchement des mollusques.
L'embranchement des mollusques comprend trois principales classes : gastéropodes, bivalves & céphalopodes.

Les divisions HEADER & NAV sont identiques dans les différentes pages.

Les différentes dossiers et fichiers nécessaires au développement

Évoquons la structure de notre site.

Quatre pages mais beaucoup plus de fichiers !

Il y aura 5 documents HTML : un document par page et un cinquième qui sert de modèle HTML.
Une feuille de style externe est aussi nécessaire.
De nombreuses images sont intégrées dans les différentes pages.
Il faut aussi un script Python-Flask.

Créer à la racine de C: un nouveau dossier et nommez le "site_flask".
Au sein de ce répertoire, créez deux dossiers : "static" & "templates".
Dans le répertoire "static" créez deux sous-dossiers : "css" et "images"

La feuille de style externe

Dans le dossier "css" créez une feuille de style nommée "style.css".
Le code de la feuille de style externe :

Il existe aussi des effets visuels : les images de petite taille (classe "gauche") sont agrandies sur survol (img.gauche:hover {transform : scale(2); })

Rappel : il existe dans mon site un : tuto sur CSS3 qui traite entre autres des "media queries".

Les images

Les fichiers jpg et png sont stockés dans le dossier static/images.

Les documents HTML

Ils sont, comme d'habitude, stockés dans le dossier templates (dossier à la racine de "site_flask").

Le document "commun.htm"

Ce fichier comprend le code commun à toutes les pages du site.
Pour toutes les pages la partie HEAD et les divisions HEADER & NAV de la partie BODY sont identiques.
Donc tout ce code HTML commun doit être écrit une seule fois dans un fichier HTML.
Par contre le code de la division SECTION diffère selon les pages.

Le code de "commun.htm"

Notez la valeur de l'attribut href de la balise link : {{url_for('static', filename ='css/style.css')}}.
Pour faire appel à des fichiers stockés dans le répertoire "static" Flask propose la méthode url_for().
Cette méthode, disponible au niveau des templates, génère une URL à partir des paramètres transmis.
Dans l'exemple l'url générée est : "/static/css/style.css"

Pour les éléments A de NAV chaque valeur de href correspond à la route. J'aurais pu employer également la méthode url_for().

La division SECTION ne contient qu'une instruction "block content" ...

La page "index.htm"

Grâce aux media queries le rendu est différent selon qu'il s'agit d'un écran de plus ou de moins 1000px de large.

Aperçu de la page sur un grand écran :

Les divisions NAV & SECTION sont côte à côte mais sous la division HEADER.

Aperçu de la page sur un petit écran :

Les trois divisions sont les unes sous les autres ; chacune occupant toute la largeur de la page.

Le code de la page "index.htm"

L'instruction {% extends "commun.htm" %} permet d'inclure le code de "commun.htm" dans cette page, c'est ce qu'on appelle l'héritage. Si vous connaissez le langage PHP c'est l'équivalent des instructions require() & include()
Grâce à l'héritage le code de la page "index.htm" est des plus succinct et se résumé à l'héritage et au code de la division SECTION.

Cette page intégre une image ; notez la valeur de l'attribut src : {{url_for('static', filename ='images/mollusques.jpg')}}
Donc la méthode url_for() permet de générer le chemin complet vers l'image, ici : "/static/images/mollusque.jpg".

La page "gasteropodes.htm"

Toujours l'héritage du fichier "commun.htm".
Notez que les images sont affectées de la classe "gauche".
Sur survol une image voit sa taille doubler grâce à la règle de style :
img.gauche:hover {transform : scale(2); }

La page "bivalves.htm"

Aucune nouveauté par rapport à la page précédente.
J'utilise toujours la méthode url_for() pour générer le chemin complet vers chaque image.

La page "cephalopodes.htm"

Rien de nouveau dans le code ; toujours l'emploi systématique de la méthode url_for() pour générer les chemins vers les images.

Le script "application.py"

Il doit être enregistré à la racine du répertoire "site_flask".
Il est ici fort simple en raison du nombre très limité de pages et au fait qu'il n'y a pas de traitements de données mais simplement affichage des différents documents HTML.
Le script :

Les codes des différentes routes se ressemblent ; affichage d'un template.

Récupération des fichiers correspondant à ce site

Vous pouvez récupérer les fichiers sous forme d'un zip.
Dossier compressé de "site_flask"

Après avoir installé le fichier décompressé sur votre PC il suffira de double-cliquer sur "application.py" pour lancer le serveur python. Puis vous basculez sur le navigateur et tapez en guise d'url : localhost:5000
Remarque : par défaut, le serveur HTTP intégré à Flask fonctionne sur le port 5000.