.. LINFO1002 documentation master file, created by
sphinx-quickstart on Tue Jan 28 18:06:33 2020.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
.. _ref-flask:
Le framework flask
==================
Il existe de nombreuses librairies qui permettent de faciliter l'écriture de
sites web interactifs en Python: `Django `_,
`Webpy `_ ou `flask `_. Dans le cadre de ce projet
nous avons choisi `flask `_ qui a l'avantage d'être simple à apprendre tout en pouvant profiter de la puissance de python.
Les premiers sites web étaient composés de pages HTML stockées dans des fichiers
se trouvant dans un même répertoire. Le serveur web était alors simplement
configuré pour servir tous les fichiers de ce répertoire. C'est ce que
l'on appelle communément un site web statique, c'est-à-dire un site web
composé de pages HTML qui ne changent pas. Ces sites web statiques sont
intéressants pour du contenu tel que ce syllabus qui ne change
que rarement. La plupart des sites web actuels sont dynamiques. Un
programme reçoit les requêtes des utilisateurs et y répond en générant
si nécessaire les pages HTML correspondantes à la volée. Flask permet
de construire un tel site web assez facilement en python.
Avant de se lancer dans l'écriture d'un site web dynamique en flask, il faut
se rappeler que sur le web, toute page est identifiée par son
Uniform Resource Locator (URL). Quand un utilisateur interagit avec
un site web à travers son navigateur, celui-ci charge différentes pages
en utilisant l'HyperText Transport Protocol (HTTP). Le fonctionnement
détaillé de HTTP sort du cadre de ce cours, mais vous devez savoir
qu'un navigateur peut utiliser HTTP de deux façons différentes.
La première est d'envoyer une requête GET HTTP pour un URL particulier. Le
serveur web répond à cette requête en renvoyant au navigateur la page
HTML correspondant à l'URL demandé. L'immense majorité des requêtes qu'un
navigateur fait à un serveur web sont des GET HTTP.
A côté de ces requêtes GET HTTP, un navigateur peut aussi utiliser
des requêtes POST HTTP. Une telle requête n'est utilisée que lorsque le
navigateur veut envoyer de l'information autre qu'un URL au serveur. C'est
par exemple le cas lorsque l'utilisateur remplit un formulaire sur une
page web.
Dans un site web purement statique, le serveur web supporte uniquement
les requêtes GET HTTP. Pour chaque URL demandé, il analyse la partie
fichier de cet URL et si le fichier existe retourne son contenu et
sinon une erreur. Pour illustrer cela, considérons que le serveur
web est configuré pour servir le répertoire ci-dessous. Celui-ci contient
deux fichiers et deux sous-répertoires.
.. code-block:: console
index.html
page.html
css
images
Le répertoire ``css`` contient le fichier ``style.css`` qui est référencé
par les deux pages HTML. Le répertoire ``images`` contient le fichier ``logo.png``.
Le fichier `index.html` contient la page reprise ci-dessous.
.. literalinclude:: figures/html/exemple.html
:language: html
Le site web a été configuré pour servir le document `index.html` lorsqu'un
navigateur demande la racine du site web (`/`). Le navigateur reçoit donc
ce fichier en réponse à sa requête GET HTTP. Il lit le contenu du document
HTML et doit directement :
- faire une requête GET HTTP pour charger la feuille de style (`style.css`)
- faire une requête GET HTTP pour charger l'image `/images/logo.png`
Si l'utilisateur clique sur le lien vers `page.html`, le navigateur
fera une nouvelle requête GET HTTP pour charger cette page depuis le serveur
et afficher son contenu. L'interaction entre un navigateur web
et un serveur est donc une succession de requêtes HTTP.
flask s'inspire de ce mode de fonctionnement et vous permet d'écrire un
programme en python qui répond aux requêtes HTTP faites par le navigateur.
.. literalinclude:: flask/simple-flask.py
:language: python
flask utilise des décorateurs python pour indiquer l'URL qui doit
être associée à une fonction python. Lorsque le serveur reçoit une
requête GET HTTP qui demande le fichier `/`, il exécute la fonction
`index()` qui retourne le contenu correspondant au fichier `index.html`.
Il en va de même pour la fonction `page()` qui est appelée automatiquement
par le serveur web dès que celui-ci reçoit une requête pour `page.html`.
.. note::
Dans le cadre de ce premier projet web, nous utiliserons la technologie
web en local. Le serveur que vous allez développer fonctionnera uniquement
sur votre ordinateur et ne sera pas accessible depuis Internet. L'écriture
d'un serveur web dynamique accessible depuis l'Internet nécessite de prendre
en compte des contraintes au niveau de la sécurité qui sortent du
cadre de ce cours de première année.
Nous vous invitons à suivre le tutoriel officiel de flask qui a été traduit en français et est disponible via : `http://renaud-detry.net/teaching/flask/tutorial/index.html#tutorial `_
.. spelling::
l'HyperText
l'URL
l'Internet
tutoriel