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 le précédent chapitre nous avons créé de nombreux templates mais ceux-ci n'avaient aucun rapport logique entre eux. L'objectif était simplement de vous montrer le rôle des templates : gérer les entrees/sorties ou en d'autres termes les saisies et les affichages.

Maintenant je vais vous montrer comment réaliser un site web avec le framework Flask. Il s'agira d'un site statique car aucune base de données est n'adossée.Ce qui signifie qu'il faut une intervention de l'administrateur du site pour que le contenu des pages évolue.

Objet du site

Ce site porte sur la biologie marine et plus précisèment sur l'embranchement des mollusques.
L'embranchement des mollusques qui appartient au règne animal, comprend trois principales classes : gastéropodes, bivalves & céphalopodes.

Les divisions HEADER & NAV ont un contenu identique dans les quatre 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 fichiers .htm : un template pour chaque page (donc quatre) et un cinquième template contenant le code commun à toutes les pages.
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 "mollusques".
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 racine du dossier "mollusques" il y aura le script "mollusques.py".

La feuille de style externe

Il serait stupide d'avoir une feuille de style interne dans chaque page.
Il faut externaliser le CSS : feuille de style externe.

Dans le dossier "static/css" créez une feuille de style nommée "style.css".

Le code du fichier "style.css" :

@media screen
{
	* {font-family : arial ; text-decoration : none ; 
		color : navy ; margin :0px ; padding :0px;}
	body {min-height : 100vh;  }   
	img.grand {display : block ; width : 90% ; 	
		margin :   10px auto ; }
	img.centre {display : block ; width : 60% ; 	
		margin :   10px auto; }
	img.gauche {margin : 5px 1% ; vertical-align : top ;  
		width : 30% ;  }
	img.gauche:hover {transform : scale(2); }
	h1,h2 {text-align : center; line-height : 40px;   }
	h1 {font-size : 1.4em; background : navy ; margin : 15px; color : white}
	h2 {font-size : 1.2em; background : skyblue ; margin : 10px ;}
	nav a {display : block ; background : silver ; line-height : 30px; 
		text-align : center;	margin : 10px auto ; }
	p {padding : 5px; text-align : justify; }
	p.titre {text-align : center; font-size : 200%; 
		line-height : 100px; text-shadow : 5px 5px 5px gray;}
	header, nav, section{background : turquoise ; margin-top : 10px;  }
}
@media screen and (min-width: 1001px)     
{
	*{font-size : 18px; }
	body {width : 1000px ; margin : 10px auto; }
 	header {float : left ; width : 100%; }
	nav {float : left ; width : 24%; }
	section {float : right ; width : 74% ; }
}
@media screen and (max-width: 1000px) 
{
	* {font-size : 16px; }
	body { width : 100%;  }
	header, nav, section {width : 100%; float : left; }
} 

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 le CSS qui traite entre autres des "media queries" : Tutoriel CSS3

Les images

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

Les templates

Ils sont toujours stockés dans le dossier templates (dossier à la racine de "mollusques").

Le template "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 commun doit être écrit une seule fois dans un template.
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 aussi la méthode url_for().

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

Le template "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 :

Site statique avec Flask

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

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

Site statique avec Flask

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

Le code "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 très succinct et se résumé à l'héritage de "commun.htm" 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".
Et oui, un moteur de template est un générateur de HTML.

Le template "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); }

Le template "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.

Le template "cephalopodes.htm"

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

Le script "mollusques.py"

Il doit être enregistré à la racine du répertoire.
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.

Le script :

Les codes des différentes routes se ressemblent et sont très succints : affichage simplement d'un template.

Conclusion

Récupération des fichiers correspondant à ce site

Vous pouvez récupérer le contenu du dossier "static" sous forme d'un zip.
Dossier "mollusques/static"

Après avoir installé le fichier décompressé sur votre PC dans un nouveau dossier, vous devrez écrire les templates (dans le sous-dossier "templates") et le script ("mollusques.py") à la racine.

Testez

Ouvrez le dossier "mollusques" ; double-cliquez sur "mollusques.py".
Le terminal windows s'affiche et précise que le serveur web local tourne sur le port 5000.
Basculez sur le navigateur et tapez dans la barre d'URL : localhost:5000
Puis vous naviguez entre les pages du site en cliquant sur les liens comme n'importe quel site.

Le code HTML généré par le moteur de recherche

Sélectionnez la page "les bivalves" ; faites un clic droit et sélectionnez "inspecteur" (pour accéder aux outils de développement) ; sélectionnez l'onglet "sources" .

Un code HTML standard s'affiche !

J'ose espérer que vous avez compris. Les instructions dans les différents templates permettent au moteur de template "Jinja" de générer du HTML standard.