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 statique avec Flask

Dans ce chapitre nous allons réaliser un site web statique avec Flask-Python. Il s'agit d'un site statique (aucune base de données n'est n'adossée). Donc le contenu des pages est identique pour tous les visiteurs.

Vous serez surpris par la "légèreté" des templates du fait de l'héritage.

Le site

Ce site porte sur la biologie aquatique 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 et céphalopodes.

Créez un nouveau dossier à la racine de C: et nommez le "appli_web_mollusques.

Les pages web

Arborescence du dossier "appli_web_mollusques"

La structure de ce répertoire devient complexe.

mollusques.py
templates : 
	parent.htm	
	index.htm
	bivalves.htm
	cephalopodes.htm
	gasteropodes.htm
static : 
	css :
		style.css 
	images :
		bigorneau.jpg
		...

Deux sous-dossiers à la racine de "appli_web_mollusques" : templates & static
le répertoire "static" contient à son tour les dossiers : css & images

Étude des différents fichiers de cette application (sauf les templates)

La feuille de style externe

Il serait stupide d'avoir une feuille de style dans chaque template. Il faut externaliser le CSS : créer une feuille de style externe et la ranger dans le sous-dossier "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 des effets visuels :
img.gauche:hover {transform : scale(2); } : les images de petite taille (classe "gauche") sont agrandies sur survol.

Le script "mollusques.py" (composante 'vues')

Il s'agit de la composante "Vues" de l'application.
Ce programme est bien sûr enregistré à la racine du répertoire "appli_web_mollusques".
Le script est simple il n'y a pas véritablement de traitement ; chaque vue se contente d'afficher un template.

from flask import Flask, render_template, request, url_for

app = Flask(__name__)

@app.route('/')
def accueil():
    return render_template("index.htm")

@app.route('/gaste')
def gaste():
    return render_template("gasteropodes.htm")

@app.route('/biva')
def biva():
    return render_template("bivalves.htm")
	
@app.route('/cepha')
def cepha():
    return render_template("cephalopodes.htm")

if __name__ == "__main__":
    app.run()

Importations : n'oubliez pas d'importer la fonction url_for() de flask.
La fonction url_for() génère dynamiquement une URL.
Elle évite d’écrire directement les chemins relatifs vers les images en particulier ; chemins relatifs qui peuvent être complexes.

Les templates

Il y a désormais une hiérarchie des templates.
Les templates "index.htm, bivalves.htm, cephalopodes.htm, gasteropodes.htm" héritent du template (bien nommé) "parent.htm".
On dit que ces quatre templates sont "enfants" de "parent.htm".

Le template "parent.htm"

Ce document comprend le code commun à toutes les pages du site.

Le code (à dérouler)

Le template "index.htm"

C'est la page d'accueil du site ; il est "enfant" par rapport à "parent.htm".

Le code "index.htm" (à dérouler)

Le template "gasteropodes.htm"

Ce template est aussi un "enfant" de "parent.htm".

Le code (à dérouler)

Le template "bivalves.htm"

Le code (à dérouler)

Le template "cephalopodes.htm"

Le code (à dérouler)

Le rendu de cette application

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 d'accueil sur un grand écran (plus de 1000px de large)

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

Aperçu de la page sur un petit écran (moins de 1000px de large)

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

À vous de "bosser" !


Pour vous familiariser avec toutes les nouveautés syntaxiques abordées dans ce chapitre, je vous invite à recréer ce site web sur votre PC puis à le tester en local.
à cette fin, je vous commmunique la version compressée du dossier "static" (donc les images et la feuille de style).
Version compressée du dossier "static"