Vous pouvez me contacter via Facebook pour questions & suggestions :
Page Facebook relative à mon site
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.
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.
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
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".
@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.
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.
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".
Ce document comprend le code commun à toutes les pages du site.
C'est la page d'accueil du site ; il est "enfant" par rapport à "parent.htm".
Ce template est aussi un "enfant" de "parent.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.
Les divisions NAV & SECTION sont côte à côte mais sous la division HEADER.
Les trois divisions sont les unes sous les autres ; chacune occupant toute la largeur de la page.